Перейти к основному содержимому
Перейти к основному содержимому

CDC из DynamoDB в ClickHouse

Experimental feature. Learn more.

Эта страница охватывает настройку CDC из DynamoDB в ClickHouse с использованием ClickPipes. В этой интеграции есть 2 компонента:

  1. Начальная снимок через S3 ClickPipes
  2. Обновления в реальном времени через Kinesis ClickPipes

Данные будут загружены в ReplacingMergeTree. Этот движок таблиц обычно используется для сценариев CDC, чтобы операции обновления могли быть применены. Больше информации об этой модели можно найти в следующих блог-статьях:

1. Настройка Kinesis Stream

Сначала вам нужно будет включить Kinesis stream на вашей таблице DynamoDB для захвата изменений в реальном времени. Мы хотим сделать это до создания снимка, чтобы не пропустить никаких данных. Найдите руководство AWS, расположенное здесь.

DynamoDB Kinesis Stream

2. Создание снимка

Далее мы создадим снимок таблицы DynamoDB. Это можно сделать через экспорт AWS в S3. Найдите руководство AWS, расположенное здесь. Вам нужно сделать "Полный экспорт" в формате JSON DynamoDB.

DynamoDB S3 Export

3. Загрузка снимка в ClickHouse

Создание необходимых таблиц

Данные снимка из DynamoDB будут выглядеть примерно так:

Обратите внимание, что данные находятся в вложенном формате. Нам нужно будет разровнять эти данные перед загрузкой в ClickHouse. Это можно сделать с помощью функции JSONExtract в ClickHouse в Materialized View.

Мы хотим создать три таблицы:

  1. Таблицу для хранения сырых данных из DynamoDB
  2. Таблицу для хранения окончательных разровненных данных (целевой таблицы)
  3. Materialized View для разравнивания данных

Для примера данных DynamoDB выше, таблицы ClickHouse будут выглядеть так:

Есть несколько требований к целевой таблице:

  • Эта таблица должна быть таблицей ReplacingMergeTree
  • Таблица должна иметь колонку version
    • На следующих этапах мы будем сопоставлять поле ApproximateCreationDateTime из Kinesis stream с колонкой version.
  • Таблица должна использовать ключ партиции в качестве ключа сортировки (указано с помощью ORDER BY)
    • Строки с одинаковым ключом сортировки будут дедуплицироваться на основе колонки version.

Создание ClickPipe для снимка

Теперь вы можете создать ClickPipe для загрузки данных снимка из S3 в ClickHouse. Следуйте руководству ClickPipe для S3 здесь, но используйте следующие настройки:

  • Ingest path: Вам нужно будет найти путь к экспортированным json файлам в S3. Путь будет выглядеть примерно так:
  • Format: JSONEachRow
  • Table: Ваша таблица снимка (например, default.snapshot в примере выше)

После создания данные начнут заполняться в таблицы снимка и назначения. Вам не нужно ждать завершения загрузки снимка, чтобы перейти к следующему шагу.

4. Создание Kinesis ClickPipe

Теперь мы можем настроить Kinesis ClickPipe для захвата изменений в реальном времени из Kinesis stream. Следуйте руководству Kinesis ClickPipe здесь, но используйте следующие настройки:

  • Stream: Kinesis stream, использованный на шаге 1
  • Table: Ваша целевая таблица (например, default.destination в примере выше)
  • Flatten object: true
  • Column mappings:
    • ApproximateCreationDateTime: version
    • Сопоставьте другие поля с соответствующими колонками назначения, как показано ниже
DynamoDB Map Columns

5. Очистка (по желанию)

После завершения ClickPipe снимка вы можете удалить таблицу снимка и материализованный вид.