跳到主要内容
跳到主要内容

index


从 Redshift 迁移数据到 ClickHouse

引言

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

Redshift 到 ClickHouse 的迁移选项

从 ClickHouse 实例的角度来看,您可以选择:

  1. PUSH 使用第三方 ETL/ELT 工具或服务将数据推送到 ClickHouse

  2. PULL 使用 ClickHouse JDBC 桥从 Redshift 中拉取数据

  3. PIVOT 使用 “卸载然后加载” 逻辑通过 S3 对象存储

备注

在本教程中,我们使用 Redshift 作为数据源。然而,这里展示的迁移方法并不局限于 Redshift,类似的步骤可以适用于任何兼容的数据源。

从 Redshift 推送数据到 ClickHouse

在推送场景中,目的是利用第三方工具或服务(无论是自定义代码还是 ETL/ELT)将您的数据发送到 ClickHouse 实例。例如,您可以使用 Airbyte 软件在 Redshift 实例(作为源)和 ClickHouse(作为目标)之间移动数据 (查看我们的 Airbyte 集成指南)

从 Redshift 推送到 ClickHouse

优点

  • 它可以利用 ETL/ELT 软件中现有连接器的目录。
  • 内置能力保持数据同步(追加/覆盖/增量逻辑)。
  • 启用数据转换场景(例如,查看我们的 dbt 集成指南)。

缺点

  • 用户需要建立和维护 ETL/ELT 基础设施。
  • 在架构中引入了第三方元素,这可能会成为潜在的可扩展性瓶颈。

从 Redshift 拉取数据到 ClickHouse

在拉取场景中,目的是利用 ClickHouse JDBC 桥直接从 ClickHouse 实例连接到 Redshift 集群并执行 INSERT INTO ... SELECT 查询:

从 Redshift 拉取到 ClickHouse

优点

  • 对所有兼容 JDBC 的工具均适用
  • 优雅的解决方案,允许从 ClickHouse 内部查询多个外部数据源

缺点

  • 需要一个 ClickHouse JDBC 桥实例,这可能会成为潜在的可扩展性瓶颈
备注

虽然 Redshift 基于 PostgreSQL,但使用 ClickHouse PostgreSQL 表函数或表引擎是不可行的,因为 ClickHouse 需要 PostgreSQL 9 版本或更高,而 Redshift API 基于较早版本(8.x)。

教程

要使用此选项,您需要设置 ClickHouse JDBC 桥。ClickHouse JDBC 桥是一个独立的 Java 应用程序,处理 JDBC 连接性,并充当 ClickHouse 实例与数据源之间的代理。在本教程中,我们使用了一个预填充的 Redshift 实例,包含一个 示例数据库

  1. 部署 ClickHouse JDBC 桥。有关更多详细信息,请参见我们的用户指南 用于外部数据源的 JDBC
备注

如果您使用 ClickHouse Cloud,您需要在单独的环境中运行 ClickHouse JDBC 桥,并使用 remoteSecure 函数连接到 ClickHouse Cloud。

  1. 为 ClickHouse JDBC 桥配置您的 Redshift 数据源。例如,/etc/clickhouse-jdbc-bridge/config/datasources/redshift.json
  1. 一旦 ClickHouse JDBC 桥部署并运行,您可以开始从 ClickHouse 查询您的 Redshift 实例
  1. 接下来,我们展示了使用 INSERT INTO ... SELECT 语句导入数据

使用 S3 从 Redshift 转换数据到 ClickHouse

在这个场景中,我们将数据导出到 S3 的中间转换格式,然后在第二步中,将数据从 S3 加载到 ClickHouse。

使用 S3 从 Redshift 进行转换

优点

  • Redshift 和 ClickHouse 都拥有强大的 S3 集成功能。
  • 利用现有的功能,如 Redshift UNLOAD 命令和 ClickHouse S3 表函数/表引擎。
  • 由于 ClickHouse 的并行读取和高吞吐能力,从/到 S3 的操作可以无缝扩展。
  • 可以利用复杂的压缩格式,如 Apache Parquet。

缺点

  • 过程中的两个步骤(从 Redshift 卸载然后加载到 ClickHouse)。

教程

  1. 使用 Redshift 的 UNLOAD 功能,将数据导出到现有的私人 S3 存储桶中:

    从 Redshift 卸载到 S3

    它将在 S3 中生成包含原始数据的部分文件

    S3 中的数据
  2. 在 ClickHouse 中创建表:

    此外,ClickHouse 可以尝试使用 CREATE TABLE ... EMPTY AS SELECT 推断表结构:

    当数据以包含类型信息的格式存在时,比如 Parquet,这种方式特别有效。

  3. 使用 INSERT INTO ... SELECT 语句将 S3 文件加载到 ClickHouse 中:

备注

此示例使用 CSV 作为转换格式。然而,对于生产工作负载,我们建议使用 Apache Parquet 作为大型迁移的最佳选项,因为它具有压缩功能,可以节省存储成本,同时减少传输时间。(默认情况下,每个行组使用 SNAPPY 进行压缩)。ClickHouse 还利用 Parquet 的列式导向来加速数据摄取。