Запись данных в открытые форматы таблиц
В предыдущих руководствах вы выполняли запросы к открытым форматам таблиц без перемещения данных и загружали данные в MergeTree для быстрой аналитики. Во многих архитектурах данные также должны передаваться в обратном направлении — из ClickHouse обратно в форматы lakehouse. Обычно это требуется в двух сценариях:
- Выгрузка в долгосрочное хранилище — Данные поступают в ClickHouse как слой Real-time аналитики, обеспечивающий работу дашбордов и операционной отчетности. Когда данные выходят за пределы окна использования в реальном времени, их можно записать в Iceberg в Объектном хранилище для надежного и экономичного долговременного хранения в интероперабельном формате.
- Обратный ETL — Преобразования, агрегации и обогащение, выполняемые в ClickHouse, создают производные наборы данных, которые должны использоваться downstream-инструментами и другими командами. Запись этих результатов в таблицы Iceberg делает их доступными для всей экосистемы данных.
В обоих случаях INSERT INTO SELECT позволяет перемещать данные из таблиц ClickHouse в таблицы Iceberg, хранящиеся в Объектном хранилище.
Запись в открытые форматы таблиц в настоящее время поддерживается только для таблиц Iceberg. Частичная поддержка таблиц Delta Lake находится в разработке. Таблицы не должны управляться каталогом.
Подготовьте исходный набор данных
В этом руководстве мы будем использовать набор данных UK Price Paid — общедоступный реестр всех сделок с жилой недвижимостью в Англии и Уэльсе.
Создайте и заполните таблицу MergeTree
Заполните таблицу непосредственно из общедоступного CSV-источника:
Запишите данные в таблицу Iceberg
Создайте таблицу Iceberg
Чтобы записывать данные в Iceberg, создайте таблицу с помощью табличного движка IcebergS3.
Обратите внимание, что схему необходимо упростить по сравнению с исходной таблицей MergeTree. ClickHouse поддерживает более богатую систему типов, чем Iceberg и лежащие в его основе файлы Parquet: такие типы, как Enum, LowCardinality и UInt8, в Iceberg не поддерживаются и должны быть преобразованы в совместимые типы.
Вставка подмножества данных
Используйте INSERT INTO SELECT, чтобы записать данные из таблицы MergeTree в таблицу Iceberg. В этом примере мы записываем только лондонские транзакции:
Выполните запрос к таблице Iceberg
Теперь данные хранятся в формате Iceberg в Объектном хранилище, и к ним можно обращаться с запросами из ClickHouse — или из любого другого инструмента, который поддерживает чтение Iceberg:
Запись агрегированных результатов
Таблицы Iceberg не ограничиваются хранением исходных строк. Они также могут содержать результаты агрегаций и преобразований — результаты ETL-процессов, выполняемых внутри ClickHouse. Это полезно, когда нужно публиковать предварительно вычисленные сводки в lakehouse для последующего использования.
Создайте таблицу Iceberg для агрегированных данных
Вставка агрегированных данных
Вычислите средние цены на недвижимость по городам и запишите результаты непосредственно в Iceberg:
Выполните запрос к агрегированной таблице
Другие инструменты — и другие экземпляры ClickHouse — теперь могут читать этот заранее вычисленный набор данных: