Интеграция с Iceberg
Пользователи могут интегрироваться с форматом таблиц Iceberg через табличную функцию.
iceberg Функция Таблицы
Предоставляет интерфейс, похожий на таблицу, только для чтения для таблиц Apache Iceberg в Amazon S3, Azure, HDFS или установленным локально.
Синтаксис
Аргументы
Описание аргументов совпадает с описанием аргументов в функциях таблиц s3
, azureBlobStorage
, HDFS
и file
соответственно.
формат
обозначает формат файлов данных в таблице Iceberg.
Возвращаемое значение
Таблица со структурой, указанной для чтения данных в указанной таблице Iceberg.
Пример
ClickHouse в настоящее время поддерживает чтение форматов v1 и v2 Iceberg через функции таблиц icebergS3
, icebergAzure
, icebergHDFS
и icebergLocal
, а также движки таблиц IcebergS3
, icebergAzure
, IcebergHDFS
и IcebergLocal
.
Определение именованной коллекции
Вот пример настройки именованной коллекции для хранения URL и учетных данных:
Эволюция схемы
В данный момент с помощью ClickHouse можно читать таблицы Iceberg, схема которых изменялась со временем. Мы в настоящее время поддерживаем чтение таблиц, в которых столбцы были добавлены и удалены, а их порядок изменен. Вы также можете изменить столбец, в котором значение является обязательным, на столбец, где значение NULL допускается. Кроме того, мы поддерживаем допустимое приведение типов для простых типов, а именно:
- int -> long
- float -> double
- decimal(P, S) -> decimal(P', S) где P' > P.
В настоящее время невозможно изменить вложенные структуры или типы элементов внутри массивов и карт.
Обрезка партиций
ClickHouse поддерживает обрезку партиций во время запросов SELECT для таблиц Iceberg, что помогает оптимизировать производительность запросов, пропуская неактуальные файлы данных. В настоящее время это работает только с идентичными преобразованиями и временными преобразованиями (час, день, месяц, год). Чтобы включить обрезку партиций, установите use_iceberg_partition_pruning = 1
.
Перемещение во времени
ClickHouse поддерживает перемещение во времени для таблиц Iceberg, позволяя вам выполнять запросы к историческим данным с определенной временной меткой или идентификатором снимка.
Основное использование
Примечание: Вы не можете указать как iceberg_timestamp_ms
, так и iceberg_snapshot_id
параметры в одном запросе.
Важные соображения
-
Снимки обычно создаются, когда:
- Новые данные записываются в таблицу
- Выполняется какое-то сжатие данных
-
Изменения схемы обычно не создают снимки - это приводит к важным поведениям при использовании перемещения во времени с таблицами, которые претерпели эволюцию схемы.
Примерные сценарии
Все сценарии написаны в Spark, потому что ClickHouse пока не поддерживает запись в таблицы Iceberg.
Сценарий 1: Изменения схемы без новых снимков
Рассмотрим эту последовательность операций:
Результаты запросов на разных временных метках:
- На ts1 и ts2: Появляются только исходные два столбца
- На ts3: Все три столбца появляются, при этом цена первого ряда равна NULL
Сценарий 2: Различия в исторической и текущей схеме
Запрос о перемещении во времени в текущий момент может показать другую схему, чем текущая таблица:
Это происходит потому, что ALTER TABLE
не создает новый снимок, а для текущей таблицы Spark берет значение schema_id
из последнего файла метаданных, а не из снимка.
Сценарий 3: Различия в исторической и текущей схеме
Второй момент заключается в том, что при перемещении во времени вы не можете получить состояние таблицы до того, как в нее были записаны какие-либо данные:
В ClickHouse поведение согласуется с Spark. Вы можете мысленно заменить запросы Select из Spark на запросы Select из ClickHouse, и это будет работать так же.
Псевдонимы
Функция таблицы iceberg
в настоящее время является псевдонимом для icebergS3
.