Прямые запросы к открытым табличным форматам
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).
Табличный движок
В настоящее время в ClickHouse нет отдельного табличного движка для Paimon. Для выполнения запросов к таблицам Paimon используйте указанные выше табличные функции.
Сведения о поддерживаемых возможностях, включая бэкенды хранения и другое, см. в матрице поддержки. Полное описание см. в документации по табличной функции paimon.