Функция таблицы 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. Вот как работает этот процесс разрешения:
Поиск кандидатов (в порядке приоритета)
-
Прямое указание пути:
- Если вы установили
iceberg_metadata_file_path
, система использует этот точный путь, комбинируя его с путем к директории таблицы Iceberg. - Когда этот параметр указан, все другие параметры разрешения игнорируются.
- Если вы установили
-
Совпадение UUID таблицы:
- Если указан
iceberg_metadata_table_uuid
, система:- Будет искать только
.metadata.json
файлы в директорииmetadata
- Отфильтрует файлы, содержащие поле
table-uuid
, совпадающее с указанным UUID (не чувствительно к регистру)
- Будет искать только
- Если указан
-
Поиск по умолчанию:
- Если ни один из вышеуказанных параметров не установлен, все
.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
.