- Начальный снимок через S3 ClickPipes
- Обновления в реальном времени через Kinesis ClickPipes
ReplacingMergeTree. Этот движок таблицы обычно используется в сценариях CDC (фиксация изменений данных), так как позволяет применять операции обновления. Подробнее об этом шаблоне можно прочитать в следующих статьях блога:
- CDC (фиксация изменений данных) с PostgreSQL и ClickHouse — Часть 1
- CDC (фиксация изменений данных) с PostgreSQL и ClickHouse — Часть 2
1
Настройте поток Kinesis
Сначала включите поток Kinesis для вашей таблицы DynamoDB, чтобы фиксировать изменения в реальном времени. Это нужно сделать до создания снимка, чтобы не пропустить данные.
Руководство AWS находится здесь.
2
Создайте снимок
Далее мы создадим снимок таблицы DynamoDB. Это можно сделать, экспортировав данные из AWS в S3. Руководство AWS находится здесь.
Вам нужно выбрать “Full export” в формате DynamoDB JSON.
3
Загрузите снимок в ClickHouse
Создайте необходимые таблицы
Данные из снимка DynamoDB будут выглядеть примерно так:JSONExtract в materialized view.Нам нужно создать три таблицы:- Таблицу для хранения исходных данных из DynamoDB
- Таблицу для хранения итоговых данных в плоской структуре (целевая таблица)
- materialized view для преобразования данных в плоскую структуру
- Эта таблица должна использовать движок
ReplacingMergeTree - В таблице должен быть столбец
version- На следующих шагах мы сопоставим поле
ApproximateCreationDateTimeиз потока Kinesis со столбцомversion.
- На следующих шагах мы сопоставим поле
- В качестве ключа сортировки таблица должна использовать ключ партиционирования (задаётся через
ORDER BY)- Для строк с одинаковым ключом сортировки будет выполняться дедупликация по столбцу
version.
- Для строк с одинаковым ключом сортировки будет выполняться дедупликация по столбцу
Создайте ClickPipe для снимка
Теперь вы можете создать ClickPipe, чтобы загрузить данные снимка из S3 в ClickHouse. Следуйте руководству по S3 ClickPipe здесь, но используйте следующие настройки:- Путь приёма: Вам нужно найти путь к экспортированным JSON‑файлам в S3. Путь будет выглядеть примерно так:
- Формат: JSONEachRow
- Таблица: Ваша таблица снимка (например,
default.snapshotв примере выше)
4
Создайте ClickPipe для Kinesis
Теперь мы можем настроить Kinesis ClickPipe для отслеживания изменений из потока Kinesis в реальном времени. Следуйте руководству по Kinesis ClickPipe здесь, но используйте следующие настройки:
- Stream: Поток Kinesis, использованный на шаге 1
- Table: Ваша целевая таблица (например,
default.destinationв примере выше) - Flatten object: true
- Column mappings:
ApproximateCreationDateTime:version- Сопоставьте другие поля с соответствующими столбцами целевой таблицы, как показано ниже
5
Очистка (необязательно)
После того как ClickPipe для снимка завершит работу, вы можете удалить таблицу снимка и materialized view.