Запись данных в открытые табличные форматы
В предыдущих руководствах вы выполняли запросы к открытым табличным форматам без их перемещения и загружали данные в MergeTree для быстрой аналитики. Во многих архитектурах данные также должны перемещаться в обратном направлении — из ClickHouse обратно в форматы lakehouse. Два распространённых сценария лежат в основе этой потребности:
- Выгрузка в долгосрочное хранилище — данные поступают в ClickHouse как слой Real-time аналитики, обеспечивая работу дашбордов и операционной отчётности. Когда данные выходят за пределы окна Real-time аналитики, их можно записать в Iceberg в объектное хранилище для надёжного и экономичного хранения в интероперабельном формате.
- Reverse ETL — преобразования, агрегации и обогащение, выполняемые внутри ClickHouse, создают производные наборы данных, которые затем используют последующие инструменты и другие команды. Запись этих результатов в таблицы 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 — могут считывать этот предварительно вычисленный набор данных: