从 Amazon Redshift 迁移到 ClickHouse 指南
介绍
Amazon Redshift 是 Amazon Web Services 提供的一项流行云数据仓库服务。本指南介绍了将数据从 Redshift 实例迁移到 ClickHouse 的不同方案。我们将介绍三种选项:

从 ClickHouse 实例的角度来看,您可以:
-
使用第三方 ETL/ELT 工具或服务将数据**推送**到 ClickHouse
-
利用 ClickHouse JDBC Bridge 从 Redshift 拉取 数据
-
通过 S3 对象存储,采用“先导出再导入”的方式进行 中转
我们在本教程中使用 Redshift 作为数据源。不过,这里介绍的迁移方法并不局限于 Redshift,对任何兼容的数据源都可以采用类似步骤。
从 Redshift 推送数据到 ClickHouse
在推送场景下,思路是利用第三方工具或服务(自定义代码或 ETL/ELT)将数据发送到你的 ClickHouse 实例。例如,你可以使用 Airbyte 这类软件,将数据从 Redshift 实例(作为源端)迁移到 ClickHouse(作为目标端)(参见我们的 Airbyte 集成指南)。

优点
- 可以利用 ETL/ELT 软件现有的连接器生态。
- 具备内置的数据同步能力(追加 / 覆盖 / 增量逻辑)。
- 支持数据转换场景(例如,参见我们的 dbt 集成指南)。
缺点
- 需要用户自行部署并维护 ETL/ELT 基础设施。
- 在架构中引入第三方组件,可能成为潜在的扩展性瓶颈。
从 Redshift 拉取数据到 ClickHouse
在拉取场景中,其思路是利用 ClickHouse JDBC Bridge 从 ClickHouse 实例直接连接到 Redshift 集群并执行 INSERT INTO ... SELECT 查询:

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

优点
- Redshift 和 ClickHouse 都具有强大的 S3 集成功能。
- 利用现有能力,例如 Redshift 的
UNLOAD命令以及 ClickHouse 的 S3 表函数 / 表引擎。 - 得益于 ClickHouse 中对 S3 的并行读取和高吞吐能力,可实现无缝扩展。
- 可以利用 Apache Parquet 等高级且支持压缩的格式。
缺点
- 流程分为两个步骤(先从 Redshift 卸载,然后加载到 ClickHouse)。
教程
在 ClickHouse 中创建表
在 ClickHouse 中创建表:
或者,ClickHouse 可以尝试使用 CREATE TABLE ... EMPTY AS SELECT 推断表结构:
当数据采用包含数据类型信息的格式(如 Parquet)时,此方法效果尤其好。
将 S3 文件加载到 ClickHouse
使用 INSERT INTO ... SELECT 语句将 S3 文件加载到 ClickHouse 中:
此示例使用 CSV 作为中间转换格式。不过,对于生产环境工作负载,我们推荐在大型迁移中使用 Apache Parquet 作为首选方案,因为它支持压缩,可以节省部分存储成本,同时缩短传输时间。(默认情况下,每个行组使用 SNAPPY 压缩)。ClickHouse 还利用 Parquet 的列式存储特性来加速数据摄取。

