メインコンテンツまでスキップ
メインコンテンツまでスキップ

DynamoDBからClickHouseへのCDC

Experimental feature. Learn more.

このページでは、ClickPipesを使用してDynamoDBからClickHouseへのCDCの設定方法を説明します。この統合には2つのコンポーネントがあります:

  1. S3 ClickPipesを介した初期スナップショット
  2. Kinesis ClickPipesを介したリアルタイム更新

データはReplacingMergeTreeに取り込まれます。このテーブルエンジンは、更新操作を適用できるようにCDCシナリオで一般的に使用されます。このパターンに関する詳細は、以下のブログ記事に記載されています:

1. Kinesis Streamの設定

まず、DynamoDBテーブルでKinesisストリームを有効にして、リアルタイムでの変更をキャプチャする必要があります。これは、スナップショットを作成する前に行い、データの欠落を避けるためです。 AWSガイドはこちらにあります。

DynamoDB Kinesis Stream

2. スナップショットの作成

次に、DynamoDBテーブルのスナップショットを作成します。これは、AWSエクスポートをS3に行うことで実現できます。AWSガイドはこちらにあります。 DynamoDB JSON形式で「フルエクスポート」を行う必要があります。

DynamoDB S3 Export

3. スナップショットをClickHouseにロードする

必要なテーブルの作成

DynamoDBからのスナップショットデータは次のようになります:

データがネストされた形式になっていることに注意してください。このデータをClickHouseにロードする前にフラット化する必要があります。これは、Materialized View内でClickHouseのJSONExtract関数を使用することで行えます。

次の三つのテーブルを作成します:

  1. DynamoDBからの生データを格納するテーブル
  2. 最終的なフラット化されたデータを格納するテーブル(宛先テーブル)
  3. データをフラット化するためのMaterialized View

上記のDynamoDBデータの例に対して、ClickHouseのテーブルは次のようになります:

宛先テーブルにはいくつかの要件があります:

  • このテーブルはReplacingMergeTreeテーブルでなければなりません
  • テーブルにはversionカラムが必要です
    • 後のステップでは、KinesisストリームからのApproximateCreationDateTimeフィールドをversionカラムにマッピングします。
  • テーブルはソートキーとしてパーティションキーを使用する必要があります(ORDER BYで指定されます)
    • 同じソートキーを持つ行は、versionカラムに基づいて重複が排除されます。

スナップショットClickPipeの作成

次に、S3からClickHouseにスナップショットデータをロードするためのClickPipeを作成できます。S3 ClickPipeガイドに従ってこちらを参照してくださいが、次の設定を使用してください:

  • 取り込みパス: エクスポートされたJSONファイルのS3内のパスを特定する必要があります。パスは次のようになります:
  • フォーマット: JSONEachRow
  • テーブル: あなたのスナップショットテーブル(上記の例ではdefault.snapshot

作成されると、データはスナップショットと宛先テーブルにポピュレートされ始めます。次のステップに進む前にスナップショットのロードが完了するのを待つ必要はありません。

4. Kinesis ClickPipeの作成

次に、Kinesisストリームからのリアルタイムの変更をキャプチャするためのKinesis ClickPipeを設定できます。Kinesis ClickPipeガイドに従ってこちらを参照してくださいが、次の設定を使用してください:

  • ストリーム: ステップ1で使用されるKinesisストリーム
  • テーブル: あなたの宛先テーブル(上記の例ではdefault.destination
  • オブジェクトをフラット化: true
  • カラムマッピング:
    • ApproximateCreationDateTime: version
    • その他のフィールドを次のように宛先カラムにマッピングします
DynamoDB Map Columns

5. クリーンアップ(オプション)

スナップショットClickPipeが完了したら、スナップショットテーブルとMaterialized Viewを削除できます。