- 通过 S3 ClickPipes 执行初始快照
- 通过 Kinesis ClickPipes 进行实时更新
ReplacingMergeTree 中。该表引擎常用于 CDC (变更数据捕获) 场景,以便应用更新操作。有关此模式的更多信息,请参阅以下博客文章:
- PostgreSQL 与 ClickHouse 的变更数据捕获 (CDC (变更数据捕获) ) - 第 1 部分
- PostgreSQL 与 ClickHouse 的变更数据捕获 (CDC (变更数据捕获) ) - 第 2 部分
1
设置 Kinesis 数据流
首先,您需要在 DynamoDB 表上启用 Kinesis 数据流,以实时捕获变更。我们希望在创建快照之前先完成这一步,以免遗漏任何数据。
AWS 指南可见此处。
2
创建快照
接下来,我们将为 DynamoDB 表创建一个快照。这可以通过 AWS 导出到 S3 的方式来实现。可在此处查看 AWS 指南。
你需要以 DynamoDB JSON 格式执行“完整导出”。
3
将快照导入 ClickHouse
创建所需的表
来自 DynamoDB 的快照数据大致如下:JSONExtract 函数来实现。我们需要创建三个表:- 一个用于存储来自 DynamoDB 的原始数据的表
- 一个用于存储最终展平后数据的表 (目标表)
- 一个用于展平数据的 materialized view
- 该表必须是
ReplacingMergeTree表 - 该表必须包含一个
version列- 在后续步骤中,我们会将 Kinesis 数据流 中的
ApproximateCreationDateTime字段映射到version列。
- 在后续步骤中,我们会将 Kinesis 数据流 中的
- 该表应将分区键用作排序键 (由
ORDER BY指定)- 具有相同排序键的行会根据
version列去重。
- 具有相同排序键的行会根据
创建快照 ClickPipe
现在,您可以创建一个 ClickPipe,将快照数据从 S3 加载到 ClickHouse。请遵循此处的 S3 ClickPipe 指南,但使用以下设置:- 摄取路径:您需要找到 S3 中已导出的 JSON 文件路径。该路径大致如下:
- 格式: JSONEachRow
- 表: 你的快照表 (例如上面示例中的
default.snapshot)
4
创建 Kinesis ClickPipe
现在我们可以设置 Kinesis ClickPipe,以捕获来自 Kinesis 数据流的实时变更。请按照这里的 Kinesis ClickPipe 指南操作,但使用以下设置:
- Stream:第 1 步中使用的 Kinesis 数据流
- Table:你的目标端表 (例如上面示例中的
default.destination) - Flatten object:true
- Column mappings:
ApproximateCreationDateTime:version- 按照下图所示,将其他字段映射到相应的目标端列
5
清理(可选)
快照 ClickPipe 完成后,您可以删除快照表和 materialized view。