index
从 Redshift 迁移数据到 ClickHouse
相关内容
引言
Amazon Redshift 是一种流行的云数据仓库解决方案,是亚马逊网络服务的一部分。本指南介绍了将数据从 Redshift 实例迁移到 ClickHouse 的不同方法。我们将涵盖三种选项:

从 ClickHouse 实例的角度来看,您可以选择:
-
PUSH 使用第三方 ETL/ELT 工具或服务将数据推送到 ClickHouse
-
PULL 使用 ClickHouse JDBC 桥从 Redshift 中拉取数据
-
PIVOT 使用 “卸载然后加载” 逻辑通过 S3 对象存储
在本教程中,我们使用 Redshift 作为数据源。然而,这里展示的迁移方法并不局限于 Redshift,类似的步骤可以适用于任何兼容的数据源。
从 Redshift 推送数据到 ClickHouse
在推送场景中,目的是利用第三方工具或服务(无论是自定义代码还是 ETL/ELT)将您的数据发送到 ClickHouse 实例。例如,您可以使用 Airbyte 软件在 Redshift 实例(作为源)和 ClickHouse(作为目标)之间移动数据 (查看我们的 Airbyte 集成指南)

优点
- 它可以利用 ETL/ELT 软件中现有连接器的目录。
- 内置能力保持数据同步(追加/覆盖/增量逻辑)。
- 启用数据转换场景(例如,查看我们的 dbt 集成指南)。
缺点
- 用户需要建立和维护 ETL/ELT 基础设施。
- 在架构中引入了第三方元素,这可能会成为潜在的可扩展性瓶颈。
从 Redshift 拉取数据到 ClickHouse
在拉取场景中,目的是利用 ClickHouse JDBC 桥直接从 ClickHouse 实例连接到 Redshift 集群并执行 INSERT INTO ... SELECT
查询:

优点
- 对所有兼容 JDBC 的工具均适用
- 优雅的解决方案,允许从 ClickHouse 内部查询多个外部数据源
缺点
- 需要一个 ClickHouse JDBC 桥实例,这可能会成为潜在的可扩展性瓶颈
虽然 Redshift 基于 PostgreSQL,但使用 ClickHouse PostgreSQL 表函数或表引擎是不可行的,因为 ClickHouse 需要 PostgreSQL 9 版本或更高,而 Redshift API 基于较早版本(8.x)。
教程
要使用此选项,您需要设置 ClickHouse JDBC 桥。ClickHouse JDBC 桥是一个独立的 Java 应用程序,处理 JDBC 连接性,并充当 ClickHouse 实例与数据源之间的代理。在本教程中,我们使用了一个预填充的 Redshift 实例,包含一个 示例数据库。
- 部署 ClickHouse JDBC 桥。有关更多详细信息,请参见我们的用户指南 用于外部数据源的 JDBC
如果您使用 ClickHouse Cloud,您需要在单独的环境中运行 ClickHouse JDBC 桥,并使用 remoteSecure 函数连接到 ClickHouse Cloud。
- 为 ClickHouse JDBC 桥配置您的 Redshift 数据源。例如,
/etc/clickhouse-jdbc-bridge/config/datasources/redshift.json
- 一旦 ClickHouse JDBC 桥部署并运行,您可以开始从 ClickHouse 查询您的 Redshift 实例
- 接下来,我们展示了使用
INSERT INTO ... SELECT
语句导入数据
使用 S3 从 Redshift 转换数据到 ClickHouse
在这个场景中,我们将数据导出到 S3 的中间转换格式,然后在第二步中,将数据从 S3 加载到 ClickHouse。

优点
- Redshift 和 ClickHouse 都拥有强大的 S3 集成功能。
- 利用现有的功能,如 Redshift
UNLOAD
命令和 ClickHouse S3 表函数/表引擎。 - 由于 ClickHouse 的并行读取和高吞吐能力,从/到 S3 的操作可以无缝扩展。
- 可以利用复杂的压缩格式,如 Apache Parquet。
缺点
- 过程中的两个步骤(从 Redshift 卸载然后加载到 ClickHouse)。
教程
-
使用 Redshift 的 UNLOAD 功能,将数据导出到现有的私人 S3 存储桶中:
它将在 S3 中生成包含原始数据的部分文件
-
在 ClickHouse 中创建表:
此外,ClickHouse 可以尝试使用
CREATE TABLE ... EMPTY AS SELECT
推断表结构:当数据以包含类型信息的格式存在时,比如 Parquet,这种方式特别有效。
-
使用
INSERT INTO ... SELECT
语句将 S3 文件加载到 ClickHouse 中:
此示例使用 CSV 作为转换格式。然而,对于生产工作负载,我们建议使用 Apache Parquet 作为大型迁移的最佳选项,因为它具有压缩功能,可以节省存储成本,同时减少传输时间。(默认情况下,每个行组使用 SNAPPY 进行压缩)。ClickHouse 还利用 Parquet 的列式导向来加速数据摄取。