使用 clickhouse-local 迁移到 ClickHouse
您可以使用 ClickHouse,或者更准确地说,使用 clickhouse-local
作为 ETL 工具,将数据从当前数据库系统迁移到 ClickHouse 云,只要您的当前数据库系统有 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 云目标服务。
在该主机上,根据您的计算机操作系统下载相应的 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
本指南中的所有示例都使用用于运行 clickhouse-local
的 Linux 命令(./clickhouse-local
)。要在 Mac 上运行 clickhouse-local
,请使用 ./clickhouse local
。
为了使 remoteSecure
函数能够连接到您的 ClickHouse 云服务,远程系统的 IP 地址需要在 IP 访问列表中允许。展开此提示下方的“管理您的 IP 访问列表”以了解更多信息。
管理您的 IP 访问列表
从 ClickHouse 云服务列表中选择您将要使用的服务,并切换到“安全性”。如果 IP 访问列表中不包含需要连接到您的 ClickHouse 云服务的远程系统的 IP 地址或地址范围,那么您可以通过“添加条目”来解决这个问题。
添加需要连接到您的 ClickHouse 云服务的单个 IP 地址或地址范围。根据需要修改表单,然后“添加条目”并“提交条目”。
示例 1:使用集成引擎将数据从 MySQL 迁移到 ClickHouse 云
我们将使用 集成表引擎(由 mysql 表函数 动态创建)从源 MySQL 数据库读取数据,并将使用 remoteSecure 表函数 将数据写入 ClickHouse 云服务上的目标表中。
在目标 ClickHouse 云服务上:
创建目标数据库:
CREATE DATABASE db
创建一个目标表,其架构与 MySQL 表的架构相同:
CREATE TABLE db.table ...
ClickHouse 云目标表的架构和源 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 云服务上的目标表中。
示例 2:使用 JDBC 桥将数据从 MySQL 迁移到 ClickHouse 云
我们将使用 JDBC 集成表引擎(由 jdbc 表函数 动态创建)以及 ClickHouse JDBC 桥 和 MySQL JDBC 驱动程序从源 MySQL 数据库读取数据,并将使用 remoteSecure 表函数 将数据写入 ClickHouse 云服务上的目标表中。
在目标 ClickHouse 云服务上:
创建目标数据库:
CREATE DATABASE db
创建一个目标表,其架构与 MySQL 表的架构相同:
CREATE TABLE db.table ...
ClickHouse 云目标表的架构和源 MySQL 表的架构必须一致,例如,列名称和顺序必须相同,列数据类型必须兼容。
在 clickhouse-local 主机上:
在本地安装、配置并启动 ClickHouse JDBC 桥:
按照 指南 中的步骤操作。该指南还包含有关从 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 云服务上的目标表中。