CREATE TABLE
Аргументы движка
S3, AzureBlobStorage, HDFS и File.
format обозначает формат файлов данных в таблице Iceberg.
Для IcebergS3 можно использовать необязательный параметр extra_credentials, чтобы передать role_arn для доступа на основе ролей в ClickHouse Cloud. Инструкции по настройке см. в разделе Secure S3.
Параметры движка можно указать с помощью именованных коллекций
Пример
Псевдонимы
Iceberg теперь служит псевдонимом для IcebergS3.
Типы данных
Примитивные типы
Сложные типы
Эволюция схемы
- int -> long
- float -> double
- decimal(P, S) -> decimal(P’, S) where P’ > P.
Отсечение партиций
use_iceberg_partition_pruning = 1. Дополнительные сведения об отсечении партиций в Iceberg см. по адресу https://iceberg.apache.org/spec/#partitioning
Путешествия во времени
Обработка таблиц с удалёнными строками
- Позиционное удаление
- Удаление по равенству (поддерживается начиная с версии 25.8+)
- Векторы удаления (Добавленный в v3)
Базовое использование
iceberg_timestamp_ms и iceberg_snapshot_id одновременно.
Важные замечания
-
Снимки обычно создаются, когда:
- В таблицу записываются новые данные
- Выполняется тот или иной вид компактации данных
- Изменения схемы обычно не создают снимки — это приводит к важным особенностям при использовании time travel с таблицами, схема которых изменялась.
Примеры сценариев
Сценарий 1: Изменения схемы без новых снимков
- В ts1 & ts2: отображаются только два исходных столбца
- В ts3: отображаются все три столбца, при этом в столбце price для первой строки указано NULL
Сценарий 2: Различия между исторической и текущей схемой
ALTER TABLE не создает новый снимок, а для текущей таблицы Spark берет значение schema_id из последнего файла метаданных, а не из снимка.
Сценарий 3: Различия между исторической и текущей схемой
Определение файла метаданных
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 в ClickHouse напрямую интерпретирует файлы, хранящиеся в S3, как таблицы Iceberg, поэтому важно понимать эти правила разрешения.
Кэш данных
Iceberg и табличная функция Iceberg поддерживают кэширование данных, как и хранилища S3, AzureBlobStorage и HDFS. См. здесь.
Кэш метаданных
Iceberg и табличная функция поддерживают кэш метаданных, в котором хранится информация о файлах manifest, manifest list и JSON метаданных. Кэш хранится в памяти. Эта возможность управляется настройкой use_iceberg_metadata_files_cache, которая по умолчанию включена.
Асинхронная предварительная выборка метаданных
Iceberg, задав iceberg_metadata_async_prefetch_period_ms. Если задано значение 0 (по умолчанию) или если кэширование метаданных не включено, асинхронная предварительная выборка отключается.
Чтобы включить эту возможность, нужно указать ненулевое значение в миллисекундах. Оно задает интервал между циклами предварительной выборки.
Если возможность включена, сервер будет периодически выполнять фоновую операцию: опрашивать удаленный каталог и обнаруживать новую версию метаданных. Затем он разберет ее и рекурсивно пройдет по снимку, загружая активные файлы списков манифестов и файлы манифестов.
Файлы, уже доступные в кэше метаданных, не будут загружаться повторно. В конце каждого цикла предварительной выборки последний снимок метаданных будет доступен в кэше метаданных.
iceberg_metadata_staleness_ms следует указывать как параметр запроса или сеанса. По умолчанию (0 — не указано) в контексте каждого запроса сервер будет получать актуальные метаданные из удалённого каталога.
Если указать допустимую степень устаревания метаданных, сервер сможет использовать кэшированную версию снимка метаданных без обращения к удалённому каталогу. Если версия метаданных есть в кэше и была загружена в пределах заданного интервала устаревания, она будет использована для обработки запроса.
В противном случае из удалённого каталога будет получена последняя версия.
ICEBERG_SCEDULE_POOL, который представляет собой серверный пул потоков для фоновых операций с активными таблицами Iceberg. Размер этого пула потоков задается параметром конфигурации сервера iceberg_background_schedule_pool_size (по умолчанию — 10).
Примечание: В настоящее время предполагается, что размер кэша метаданных достаточен для полного хранения последнего снимка метаданных для всех активных таблиц, если включена асинхронная предварительная загрузка.