Amazon Redshift 到 ClickHouse 迁移指南
简介
Amazon Redshift 是一种流行的云数据仓库解决方案,是 Amazon Web Services 产品的一部分。 本指南介绍了将数据从 Redshift 实例迁移到 ClickHouse 的不同方法。 我们将涵盖三种方案
从 ClickHouse 实例的角度来看,您可以选择
-
推送 数据到 ClickHouse,使用第三方 ETL/ELT 工具或服务
-
拉取 数据从 Redshift,利用 ClickHouse JDBC Bridge
-
枢轴 使用 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
在此场景中,我们将数据导出到 S3 中的中间枢轴格式,然后在第二步中将数据从 S3 加载到 ClickHouse。
优点
- Redshift 和 ClickHouse 均具有强大的 S3 集成功能。
- 利用现有功能,例如 Redshift
UNLOAD命令和 ClickHouse S3 表函数/表引擎。 - 由于 ClickHouse 的并行读取和高吞吐量功能,可以无缝扩展。
- 可以利用复杂且压缩的格式,例如 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 的列方向来加速数据摄取。