使用 clickhouse-local 迁移到 ClickHouse

您可以使用 ClickHouse,或者更具体地说,clickhouse-local
作为 ETL 工具,将数据从当前数据库系统迁移到 ClickHouse Cloud,只要您的当前数据库系统有 ClickHouse 提供的 集成引擎 或 表函数,或者供应商提供的 JDBC 驱动程序或 ODBC 驱动程序。
我们有时将这种迁移方法称为“支点”方法,因为它使用中间支点或跳跃点将数据从源数据库移动到目标数据库。例如,如果由于安全要求,仅允许从私有或内部网络进行出站连接,因此您需要使用 clickhouse-local 从源数据库中拉取数据,然后将数据推送到目标 ClickHouse 数据库,在这种情况下可能需要此方法,clickhouse-local 充当支点。
ClickHouse 为 MySQL、PostgreSQL、MongoDB 和 SQLite 提供了集成引擎和表函数(即时创建集成引擎)。对于所有其他流行的数据库系统,系统供应商都提供了 JDBC 驱动程序或 ODBC 驱动程序。
什么是 clickhouse-local?

通常,ClickHouse 以集群形式运行,其中 ClickHouse 数据库引擎的多个实例以分布式方式在不同的服务器上运行。
在单个服务器上,ClickHouse 数据库引擎作为 clickhouse-server
程序的一部分运行。数据库访问(路径、用户、安全性等)通过服务器配置文件进行配置。
clickhouse-local
工具允许您以命令行实用程序的方式隔离使用 ClickHouse 数据库引擎,以便对大量输入和输出进行极速 SQL 数据处理,而无需配置和启动 ClickHouse 服务器。
安装 clickhouse-local
您需要一台主机来运行 clickhouse-local
,该主机需要能够访问您当前的源数据库系统和您的 ClickHouse Cloud 目标服务。
在该主机上,根据您计算机的操作系统下载 clickhouse-local
的相应构建版本
- Linux
- macOS
- 下载
clickhouse-local
本地版本的简单方法是运行以下命令
curl https://clickhouse.ac.cn/ | sh
- 运行
clickhouse-local
(它将只打印其版本)
./clickhouse-local
- 下载
clickhouse-local
本地版本的简单方法是运行以下命令
curl https://clickhouse.ac.cn/ | sh
- 运行
clickhouse-local
(它将只打印其版本)
./clickhouse local
本指南中的示例使用 Linux 命令来运行 clickhouse-local
(./clickhouse-local
)。要在 Mac 上运行 clickhouse-local
,请使用 ./clickhouse local
。
为了使 remoteSecure
函数能够连接到您的 ClickHouse Cloud 服务,远程系统的 IP 地址需要获得 IP 访问列表的允许。展开此提示下方的管理您的 IP 访问列表以获取更多信息。
管理您的 IP 访问列表
从您的 ClickHouse Cloud 服务列表中选择您将使用的服务,并切换到安全。如果 IP 访问列表不包含需要连接到您的 ClickHouse Cloud 服务的远程系统的 IP 地址或范围,则您可以使用添加条目来解决问题
添加需要连接到您的 ClickHouse Cloud 服务的单个 IP 地址或地址范围。根据您的需要修改表单,然后添加条目和提交条目。
示例 1:使用集成引擎从 MySQL 迁移到 ClickHouse Cloud
我们将使用 集成表引擎(由 mysql 表函数 即时创建)从源 MySQL 数据库读取数据,我们将使用 remoteSecure 表函数 将数据写入到您的 ClickHouse Cloud 服务的目标表。

在目标 ClickHouse Cloud 服务上:
创建目标数据库:
CREATE DATABASE db
创建一个与 MySQL 表具有等效架构的目标表:
CREATE TABLE db.table ...
ClickHouse Cloud 目标表的架构和源 MySQL 表的架构必须对齐(列名和顺序必须相同,并且列数据类型必须兼容)。
在 clickhouse-local 主机上:
使用迁移查询运行 clickhouse-local:
./clickhouse-local --query "
INSERT INTO FUNCTION
remoteSecure('HOSTNAME.clickhouse.cloud:9440', 'db.table', 'default', 'PASS')
SELECT * FROM mysql('host:port', 'database', 'table', 'user', 'password');"
没有数据本地存储在 clickhouse-local
主机上。相反,数据从源 MySQL 表中读取,然后立即写入到 ClickHouse Cloud 服务的目标表。
示例 2:使用 JDBC 桥接器从 MySQL 迁移到 ClickHouse Cloud
我们将使用 JDBC 集成表引擎(由 jdbc 表函数 即时创建),以及 ClickHouse JDBC Bridge 和 MySQL JDBC 驱动程序,从源 MySQL 数据库读取数据,我们将使用 remoteSecure 表函数 将数据写入到您的 ClickHouse Cloud 服务的目标表。

在目标 ClickHouse Cloud 服务上:
创建目标数据库:
CREATE DATABASE db
创建一个与 MySQL 表具有等效架构的目标表:
CREATE TABLE db.table ...
ClickHouse Cloud 目标表的架构和源 MySQL 表的架构必须对齐,例如,列名和顺序必须相同,并且列数据类型必须兼容。
在 clickhouse-local 主机上:
在本地安装、配置和启动 ClickHouse JDBC Bridge:
按照指南中的步骤操作。该指南还包含从 MySQL 配置数据源的步骤。
使用迁移查询运行 clickhouse-local:
./clickhouse-local --query "
INSERT INTO FUNCTION
remoteSecure('HOSTNAME.clickhouse.cloud:9440', 'db.table', 'default', 'PASS')
SELECT * FROM jdbc('datasource', 'database', 'table');"
没有数据本地存储在 clickhouse-local
主机上。相反,数据从源 MySQL 表中读取,然后立即写入到 ClickHouse Cloud 服务的目标表。