Функция таблицы iceberg
Предоставляет интерфейс в виде таблицы только для чтения к таблицам Apache Iceberg в Amazon S3, Azure, HDFS или локально хранимым.
Синтаксис
Аргументы
Описание аргументов совпадает с описанием аргументов в функциях таблиц s3
, azureBlobStorage
, HDFS
и file
соответственно.
format
обозначает формат файлов данных в таблице Iceberg.
Возвращаемое значение
Таблица с указанной структурой для чтения данных в указанной таблице Iceberg.
Пример
На данный момент ClickHouse поддерживает чтение форматов v1 и v2 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
.
Временное перемещение
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
в настоящее время является псевдонимом для icebergS3
.