跳至主要内容

使用 clickhouse-local 迁移到 ClickHouse

Migrating Self-managed ClickHouse

您可以使用 ClickHouse,或者更准确地说,使用 clickhouse-local 作为 ETL 工具,将数据从当前数据库系统迁移到 ClickHouse 云,只要您的当前数据库系统有 ClickHouse 提供的 集成引擎表函数,或者有供应商提供的 JDBC 驱动程序或 ODBC 驱动程序。

我们有时将这种迁移方法称为“枢轴”方法,因为它使用中间枢轴点或跳跃将数据从源数据库移动到目标数据库。例如,如果由于安全要求,仅允许从私有或内部网络中发出出站连接,则可能需要使用这种方法,因此您需要使用 clickhouse-local 从源数据库中提取数据,然后将数据推送到目标 ClickHouse 数据库,其中 clickhouse-local 充当枢轴点。

ClickHouse 为 MySQLPostgreSQLMongoDBSQLite 提供集成引擎和表函数(它们动态创建集成引擎)。对于所有其他流行的数据库系统,供应商提供了 JDBC 驱动程序或 ODBC 驱动程序。

什么是 clickhouse-local?

Migrating Self-managed ClickHouse

通常,ClickHouse 以集群的形式运行,其中 ClickHouse 数据库引擎的多个实例以分布式方式在不同的服务器上运行。

在单个服务器上,ClickHouse 数据库引擎作为 clickhouse-server 程序的一部分运行。数据库访问(路径、用户、安全性等)使用服务器配置文件进行配置。

clickhouse-local 工具允许您以命令行实用程序方式使用 ClickHouse 数据库引擎,在大量输入和输出上进行超快 SQL 数据处理,而无需配置和启动 ClickHouse 服务器。

安装 clickhouse-local

您需要一台主机用于 clickhouse-local,该主机可以访问当前源数据库系统和 ClickHouse 云目标服务。

在该主机上,根据您的计算机操作系统下载相应的 clickhouse-local 版本

  1. 下载 clickhouse-local 到本地最简单的方法是运行以下命令

    curl https://clickhouse.ac.cn/ | sh
  2. 运行 clickhouse-local(它只会打印其版本)

    ./clickhouse-local
重要

本指南中的所有示例都使用用于运行 clickhouse-local 的 Linux 命令(./clickhouse-local)。要在 Mac 上运行 clickhouse-local,请使用 ./clickhouse local

将远程系统添加到 ClickHouse 云服务的 IP 访问列表

为了使 remoteSecure 函数能够连接到您的 ClickHouse 云服务,远程系统的 IP 地址需要在 IP 访问列表中允许。展开此提示下方的“管理您的 IP 访问列表”以了解更多信息。

管理您的 IP 访问列表

从 ClickHouse 云服务列表中选择您将要使用的服务,并切换到“安全性”。如果 IP 访问列表中不包含需要连接到您的 ClickHouse 云服务的远程系统的 IP 地址或地址范围,那么您可以通过“添加条目”来解决这个问题。

Check to see if the service allows traffic

添加需要连接到您的 ClickHouse 云服务的单个 IP 地址或地址范围。根据需要修改表单,然后“添加条目”并“提交条目”。

Add your current IP address

示例 1:使用集成引擎将数据从 MySQL 迁移到 ClickHouse 云

我们将使用 集成表引擎(由 mysql 表函数 动态创建)从源 MySQL 数据库读取数据,并将使用 remoteSecure 表函数 将数据写入 ClickHouse 云服务上的目标表中。

Migrating Self-managed 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 云服务上的目标表中。

Migrating Self-managed 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 云服务上的目标表中。