- S3 ClickPipes による初期スナップショット
- Kinesis ClickPipes によるリアルタイム更新
ReplacingMergeTree に取り込まれます。このテーブルエンジンは、更新操作を適用できるようにするため、CDC のユースケースで一般的に使用されます。このパターンの詳細については、以下のブログ記事を参照してください。
- PostgreSQL と ClickHouse を使った変更データキャプチャ (CDC) - 第1部
- PostgreSQL と ClickHouse を使った変更データキャプチャ (CDC) - 第2部
1
Kinesis Stream を設定する
まず、変更をリアルタイムで取得するために、DynamoDB テーブルで Kinesis Stream を有効にします。データの取りこぼしを防ぐため、スナップショットを作成する前にこれを行います。
AWS のガイドはこちらにあります。
2
スナップショットを作成する
次に、DynamoDB テーブルのスナップショットを作成します。これは、AWS から S3 にエクスポートすることで実行できます。AWS のガイドはこちらにあります。
DynamoDB JSON フォーマットで「Full export」を実行してください。
3
スナップショットを ClickHouse に読み込む
必要なテーブルを作成する
DynamoDB から取得したスナップショットデータは、次のようになります:JSONExtract 関数を使って行えます。作成するテーブルは 3 つあります。- DynamoDB の生データを格納するためのテーブル
- 最終的なフラット化済みデータを格納するためのテーブル (宛先テーブル)
- データをフラット化するための materialized view
- このテーブルは
ReplacingMergeTreeテーブルである必要があります - テーブルには
versionカラムが必要です- 後続の手順では、Kinesis Stream の
ApproximateCreationDateTimeフィールドをversionカラムにマッピングします。
- 後続の手順では、Kinesis Stream の
- テーブルでは、パーティションキーをソートキー (
ORDER BYで指定) として使用する必要があります- 同じソートキーを持つ行は、
versionカラムに基づいて重複排除されます。
- 同じソートキーを持つ行は、
スナップショット ClickPipe を作成する
これで、S3 から ClickHouse にスナップショットデータを読み込むための ClickPipe を作成できます。こちらの S3 ClickPipe ガイドに従ってください。ただし、以下の設定を使用します。- 取り込みパス: S3 内でエクスポートされた JSON ファイルのパスを特定する必要があります。パスは次のようになります:
- フォーマット: JSONEachRow
- テーブル: スナップショットテーブル (上記の例では
default.snapshot)
4
Kinesis ClickPipeを作成する
これで、Kinesis Stream からリアルタイムの変更を取り込むための Kinesis ClickPipe を設定できます。こちらの Kinesis ClickPipe ガイドに従ってください。ただし、以下の設定を使用します。
- Stream: 手順 1 で使用した Kinesis Stream
- Table: 宛先テーブル (例: 上記の
default.destination) - Flatten object: true
- Column mappings:
ApproximateCreationDateTime:version- 以下に示すように、他のフィールドを適切な宛先カラムにマッピングします
5
クリーンアップ(任意)
スナップショット用の ClickPipe が完了したら、スナップショットテーブルと materialized view を削除できます。