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

Движок таблиц Iceberg

осторожно

Рекомендуем использовать табличную функцию Iceberg для работы с данными Iceberg в ClickHouse. Табличная функция Iceberg в настоящее время предоставляет достаточно функциональности, предлагая частичный интерфейс только для чтения для таблиц Iceberg.

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

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

Этот движок обеспечивает интеграцию только для чтения с существующими таблицами Apache Iceberg в Amazon S3, Azure, HDFS и локально хранимыми таблицами.

Создать таблицу

Обратите внимание, что таблица Iceberg должна уже существовать в хранилище, эта команда не принимает DDL параметры для создания новой таблицы.

Аргументы движка

Описание аргументов совпадает с описанием аргументов в движках S3, AzureBlobStorage, HDFS и File соответственно. format обозначает формат файлов данных в таблице Iceberg.

Параметры движка могут быть указаны с использованием именованных коллекций.

Пример

Используя именованные коллекции:

Псевдонимы

Движок таблиц Iceberg является псевдонимом для IcebergS3 в настоящее время.

Эволюция схемы

На данный момент с помощью CH вы можете читать таблицы Iceberg, схема которых изменилась с течением времени. В настоящее время мы поддерживаем чтение таблиц, в которых были добавлены и удалены столбцы, и порядок которых изменился. Вы также можете изменить столбец, где значение требуется, на тот, где допускается NULL. Кроме того, мы поддерживаем разрешенное преобразование типов для простых типов, а именно:  

  • int -> long
  • float -> double
  • decimal(P, S) -> decimal(P', S) где P' > P.

В настоящее время невозможно изменить вложенные структуры или типы элементов внутри массивов и карт.

Чтобы прочитать таблицу, схема которой изменилась после ее создания с динамическим выводом схемы, установите allow_dynamic_metadata_for_data_lakes = true при создании таблицы.

Обрезка партиций

ClickHouse поддерживает обрезку партиций во время запросов SELECT для таблиц Iceberg, что помогает оптимизировать производительность запросов, пропуская нерелевантные файлы данных. В настоящее время это работает только с преобразованиями идентичности и временными преобразованиями (час, день, месяц, год). Чтобы включить обрезку партиций, установите use_iceberg_partition_pruning = 1.

Путешествие во времени

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

Основное использование

Примечание: Вы не можете указать как iceberg_timestamp_ms, так и iceberg_snapshot_id параметры в одном запросе.

Важные соображения

  • Снимки обычно создаются, когда:

    • Новые данные записываются в таблицу
    • Выполняется какая-либо агрегация данных
  • Изменения схемы обычно не создают снимков - Это приводит к важным последствиям при использовании путешествия во времени с таблицами, которые подверглись эволюции схемы.

Примеры сценариев

Все сценарии написаны в Spark, потому что CH еще не поддерживает запись в таблицы Iceberg.

Сценарий 1: Изменения схемы без новых снимков

Рассмотрим эту последовательность операций:

Результаты запроса в разные временные метки:

  • На ts1 и ts2: Появляются только оригинальные два столбца
  • На ts3: Появляются все три столбца, с NULL для цены первой строки

Сценарий 2: Различия между исторической и текущей схемой

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

Это происходит потому, что ALTER TABLE не создает новый снимок, но для текущей таблицы Spark берет значение schema_id из последнего файла метаданных, а не из снимка.

Сценарий 3: Различия между исторической и текущей схемой

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

В Clickhouse поведение соответствует Spark. Вы можете мысленно заменить запросы Select в Spark на запросы Select в Clickhouse, и это будет работать так же.

Кэш данных

Движок таблиц Iceberg и табличная функция поддерживают кэширование данных так же, как хранилища S3, AzureBlobStorage, HDFS. См. здесь.

Смотрите также