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

Функция таблицы iceberg

Обеспечивает интерфейс, похожий на таблицу, только для чтения, для таблиц Apache Iceberg в Amazon S3, Azure, HDFS или локально.

Синтаксис

Аргументы

Описание аргументов совпадает с описанием аргументов в функциях таблиц s3, azureBlobStorage, HDFS и file соответственно. format обозначает формат файлов данных в таблице Iceberg.

Возвращаемое значение

Таблица с указанной структурой для чтения данных в указанной таблице Iceberg.

Пример

к сведению

На данный момент ClickHouse поддерживает чтение версий 1 и 2 формата Iceberg через функции таблиц icebergS3, icebergAzure, icebergHDFS и icebergLocal, а также движки таблиц IcebergS3, icebergAzure, IcebergHDFS и IcebergLocal.

Определение именованной коллекции

Вот пример настройки именованной коллекции для хранения URL и учетных данных:

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

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

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

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

Устранение партиций

ClickHouse поддерживает устранение партиций во время запросов SELECT для таблиц Iceberg, что помогает оптимизировать производительность запросов за счет пропуска неуместных файлов данных. Чтобы включить устранение партиций, установите use_iceberg_partition_pruning = 1. Для получения дополнительной информации о устранении партиций Iceberg обратитесь к https://iceberg.apache.org/spec/#partitioning.

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

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 в ClickHouse системе необходимо найти правильный файл metadata.json, который описывает структуру таблицы Iceberg. Вот как работает этот процесс разрешения:

  1. Прямое указание пути:

    • Если вы установили iceberg_metadata_file_path, система использует этот точный путь, комбинируя его с путем к директории таблицы Iceberg.
    • Когда этот параметр указан, все другие параметры разрешения игнорируются.
  2. Совпадение UUID таблицы:

    • Если указан iceberg_metadata_table_uuid, система:
      • Будет искать только .metadata.json файлы в директории metadata
      • Отфильтрует файлы, содержащие поле table-uuid, совпадающее с указанным UUID (не чувствительно к регистру)
  3. Поиск по умолчанию:

    • Если ни один из вышеуказанных параметров не установлен, все .metadata.json файлы в директории metadata становятся кандидатами

Выбор самого последнего файла

После идентификации кандидатов по вышеуказанным правилам система определяет, какой из них самый последний:

  • Если включен iceberg_recent_metadata_file_by_last_updated_ms_field:

    • Выбирается файл с наибольшим значением last-updated-ms
  • В противном случае:

    • Выбирается файл с самым высоким номером версии
    • (Версия появляется как V в именах файлов, отформатированных как V.metadata.json или V-uuid.metadata.json)

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

Примечание: Хотя Каталоги Iceberg обычно обрабатывают разрешение метаданных, функция таблицы iceberg в ClickHouse непосредственно интерпретирует файлы, хранящиеся в S3, как таблицы Iceberg, поэтому понимание этих правил разрешения важно.

Кэш метаданных

Движок таблицы Iceberg и функция таблицы поддерживают кэш метаданных, хранящий информацию о манифест-файлах, списке манифестов и json метаданных. Кэш хранится в памяти. Эта функция контролируется параметром use_iceberg_metadata_files_cache, который включен по умолчанию.

Псевдонимы

Функция таблицы iceberg сейчас является псевдонимом для icebergS3.

См. Также