简介
- 推送 使用第三方 ETL/ELT 工具或服务将数据推送到 ClickHouse
- 拉取 借助 ClickHouse JDBC Bridge 从 Redshift 拉取数据
- 中转 使用 S3 对象存储,采用“先卸载后加载”的方式
本教程以 Redshift 作为数据源。不过,这里介绍的迁移方法并非 Redshift 独有,对于任何兼容的数据源,都可以参考类似步骤进行迁移。
将数据从 Redshift 推送到 ClickHouse
优点
- 可以利用 ETL/ELT 软件现有的连接器目录。
- 内置数据同步能力 (追加/覆盖/增量逻辑) 。
- 支持数据转换场景 (例如,参阅我们的 dbt 集成指南) 。
缺点
- 你需要搭建并维护 ETL/ELT 相关基础设施。
- 这会在架构中引入第三方组件,可能成为潜在的扩展性瓶颈。
从 Redshift 拉取数据到 ClickHouse
INSERT INTO ... SELECT 查询:
优点
- 适用于所有兼容 JDBC 的工具
- 一种优雅的方案,可直接在 ClickHouse 中查询多个外部数据源
缺点
- 需要一个 ClickHouse JDBC Bridge 实例,这可能会成为潜在的扩展性瓶颈
尽管 Redshift 基于 PostgreSQL,但无法使用 ClickHouse 的 PostgreSQL 表函数或表引擎,因为 ClickHouse 要求 PostgreSQL 版本为 9 或更高,而 Redshift API 基于更早的版本 (8.x) 。
教程
1
部署 ClickHouse JDBC Bridge
部署 ClickHouse JDBC Bridge。更多信息请参阅我们的用户指南:外部数据源 JDBC如果您使用的是 ClickHouse Cloud,则需要在单独的环境中运行 ClickHouse JDBC Bridge,并使用 remoteSecure 函数连接到 ClickHouse Cloud
2
配置您的 Redshift 数据源
为 ClickHouse JDBC Bridge 配置 Redshift 数据源。例如,/etc/clickhouse-jdbc-bridge/config/datasources/redshift.json 3
4
使用 S3 将数据从 Redshift 中转至 ClickHouse
优点
- Redshift 和 ClickHouse 都具备强大的 S3 集成能力。
- 可利用现有功能,例如 Redshift 的
UNLOAD命令以及 ClickHouse 的 S3 表函数 / 表引擎。 - 得益于 ClickHouse 对 S3 的并行读写和高吞吐能力,可轻松实现扩展。
- 可以利用 Apache Parquet 这类高级压缩格式。
缺点
- 该过程需要两个步骤 (先从 Redshift 卸载,再加载到 ClickHouse) 。
教程
2
在 ClickHouse 中创建表
在 ClickHouse 中创建表:CREATE TABLE ... EMPTY AS SELECT 尝试推断表结构:3
将 S3 文件加载到 ClickHouse 中
使用INSERT INTO ... SELECT 语句将 S3 文件加载到 ClickHouse 中:此示例使用 CSV 作为中转格式。不过,对于生产工作负载,我们推荐 Apache Parquet 作为大规模迁移的最佳选择,因为它自带压缩,既能缩短传输时间,也能节省部分存储成本。 (默认情况下,每个行组都使用 SNAPPY 压缩。) ClickHouse 还会利用 Parquet 的列式特性来加快数据摄取。