Прямые запросы к открытым табличным форматам
ClickHouse предоставляет табличные функции для выполнения запросов к данным, хранящимся в открытых табличных форматах непосредственно в объектном хранилище. Для этого не требуется подключение к внешнему каталогу — запросы выполняются по данным на месте, аналогично тому, как AWS Athena читает из S3.
Вы передаёте путь к хранилищу и учётные данные прямо в вызове функции, а ClickHouse берёт на себя остальное. Доступен весь синтаксис SQL ClickHouse и все функции, а запросы выигрывают за счёт параллельного выполнения в ClickHouse и эффективного встроенного Parquet‑ридера.
Действия, описанные в этом руководстве, можно выполнить, используя существующую установку сервера ClickHouse. Для разовых запросов вы можете вместо этого использовать clickhouse-local и выполнить тот же рабочий процесс без запуска сервера. С небольшими изменениями этот процесс также может быть выполнен с использованием встроенного дистрибутива ClickHouse, chDB.
Следующие примеры используют датасет hits, сохранённый в каждом lakehouse‑формате в S3. Для каждого lakehouse‑формата существуют отдельные функции для каждого провайдера объектного хранилища.
- Apache Iceberg
- Delta Lake
- Apache Hudi
- Apache Paimon
Табличная функция iceberg (псевдоним для icebergS3) читает таблицы Iceberg непосредственно из объектного хранилища. Для каждого бэкенда хранилища предусмотрен отдельный вариант: icebergS3, icebergAzure, icebergHDFS и icebergLocal.
Пример синтаксиса:
Вариант функций S3 можно использовать для Google Cloud Storage (GCS).
Пример:
Кластерный вариант
Функция icebergS3Cluster распределяет операции чтения между несколькими узлами кластера ClickHouse. Узел-инициатор устанавливает соединения со всеми узлами и динамически раздаёт файлы данных на обработку. Каждый рабочий узел запрашивает и обрабатывает задачи до тех пор, пока не будут прочитаны все файлы. icebergCluster — псевдоним для icebergS3Cluster. Также существуют варианты для Azure (icebergAzureCluster) и HDFS (icebergHDFSCluster).
Пример синтаксиса:
Пример (ClickHouse Cloud):
Движок таблицы
В качестве альтернативы использованию табличной функции в каждом запросе можно создать постоянную таблицу с помощью движка таблиц Iceberg. Данные по-прежнему хранятся в объектном хранилище и считываются по требованию — никакие данные не копируются в ClickHouse. Преимущество заключается в том, что определение таблицы хранится в ClickHouse и доступно всем пользователям и сессиям без необходимости указывать путь к хранилищу и учётные данные для каждого пользователя. Для каждого бэкенда хранилища предусмотрены соответствующие варианты движка: IcebergS3 (или псевдоним Iceberg), IcebergAzure, IcebergHDFS и IcebergLocal.
Как движок таблиц, так и табличная функция поддерживают кэширование данных, используя тот же механизм кэширования, что и движки хранилищ S3, AzureBlobStorage и HDFS. Кроме того, кэш метаданных хранит информацию о файлах манифеста в памяти, сокращая количество повторных операций чтения метаданных Iceberg. Этот кэш включён по умолчанию с помощью настройки use_iceberg_metadata_files_cache.
Пример синтаксиса:
Движок таблиц Iceberg является псевдонимом IcebergS3.
Вариант табличного движка S3 можно использовать для Google Cloud Storage (GCS).
Пример:
Список поддерживаемых функций, включая отсечение партиций, эволюцию схемы, перемещение во времени, кэширование и другое, см. в матрице поддержки. Полную справочную информацию см. в документации по табличной функции iceberg и движку таблиц Iceberg.
Табличная функция deltaLake (псевдоним для deltaLakeS3) считывает таблицы Delta Lake из объектного хранилища. Для других бэкендов предусмотрены варианты: deltaLakeAzure и deltaLakeLocal.
Пример синтаксиса:
Вариант функций S3 можно использовать для Google Cloud Storage (GCS).
Пример:
Вариант с кластером
Функция deltaLakeCluster распределяет операции чтения между несколькими узлами кластера ClickHouse. Узел-инициатор динамически направляет файлы данных на рабочие узлы для параллельной обработки. deltaLakeS3Cluster является псевдонимом deltaLakeCluster. Также доступен вариант для Azure (deltaLakeAzureCluster).
Пример синтаксиса:
Вариант функций S3 можно использовать для Google Cloud Storage (GCS).
Пример (ClickHouse Cloud):
Движок таблицы
В качестве альтернативы использованию табличной функции в каждом запросе можно создать постоянную таблицу с помощью движка таблиц DeltaLake при использовании S3-совместимого хранилища. Данные по-прежнему хранятся в объектном хранилище и считываются по требованию — никакие данные не копируются в ClickHouse. Преимущество заключается в том, что определение таблицы хранится в ClickHouse и может использоваться совместно несколькими пользователями и сессиями без необходимости указывать путь к хранилищу и учётные данные для каждого пользователя.
Движок таблицы и табличная функция поддерживают кэширование данных, используя тот же механизм кэширования, что и движки хранилища S3, AzureBlobStorage и HDFS.
Пример синтаксиса:
Этот движок таблиц можно использовать с Google Cloud Storage (GCS).
Пример:
Список поддерживаемых функций, включая бэкенды хранилища, кэширование и другое, см. в матрице поддержки. Полную справочную информацию см. в документации по табличной функции deltaLake и движку таблиц DeltaLake.
Табличная функция hudi читает таблицы Hudi из S3.
Синтаксис:
Кластерный вариант
Функция hudiCluster распределяет чтение по нескольким узлам в кластере ClickHouse. Инициирующий узел динамически распределяет файлы данных между рабочими узлами для параллельной обработки.
Движок таблицы
В качестве альтернативы использованию табличной функции в каждом запросе вы можете создать постоянную таблицу, используя табличный движок Hudi. Данные по-прежнему находятся в объектном хранилище и считываются по требованию — никакие данные не копируются в ClickHouse. Преимущество заключается в том, что определение таблицы хранится в ClickHouse и может совместно использоваться пользователями и сеансами без необходимости каждому пользователю указывать путь к хранилищу и учетные данные.
Синтаксис:
Список поддерживаемых функций, включая системы хранения и другие возможности, см. в матрице поддержки. Полное справочное описание приведено в документации по табличной функции hudi и табличному движку Hudi.
Табличная функция paimon (псевдоним paimonS3) считывает таблицы Paimon из объектного хранилища. Существуют варианты для каждого типа хранилища: paimonS3, paimonAzure, paimonHDFS и paimonLocal.
Синтаксис:
Кластерный вариант
Функция paimonS3Cluster распределяет операции чтения между несколькими узлами в кластере ClickHouse. Инициирующий узел динамически передаёт файлы с данными рабочим узлам для параллельной обработки. paimonCluster является псевдонимом paimonS3Cluster. Также существуют варианты для Azure (paimonAzureCluster) и HDFS (paimonHDFSCluster).
Движок таблицы
В настоящее время у Paimon нет отдельного движка таблицы в ClickHouse. Используйте указанные выше табличные функции для выполнения запросов к таблицам Paimon.
Список поддерживаемых возможностей, включая типы хранилищ и другие функции, см. в матрице поддержки. Полное описание приведено в документации по табличной функции paimon.