Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

DataLakeCatalog

Движок базы данных DataLakeCatalog позволяет подключать ClickHouse к внешним каталогам данных и выполнять запросы к данным в открытых табличных форматах без дублирования данных. Это превращает ClickHouse в мощный движок запросов, который легко интегрируется с вашей существующей инфраструктурой озера данных.

Поддерживаемые каталоги

Движок DataLakeCatalog поддерживает следующие каталоги данных:

  • Каталог AWS Glue — для таблиц Iceberg в средах AWS
  • Databricks Unity Catalog — для таблиц Delta Lake и Iceberg
  • Hive Metastore — традиционный каталог экосистемы Hadoop
  • REST-каталоги — любые каталоги, поддерживающие спецификацию Iceberg REST

Создание базы данных

Чтобы использовать движок DataLakeCatalog, необходимо включить указанные ниже настройки:

SET allow_experimental_database_iceberg = 1;
SET allow_experimental_database_unity_catalog = 1;
SET allow_experimental_database_glue_catalog = 1;
SET allow_experimental_database_hms_catalog = 1;
SET allow_experimental_database_paimon_rest_catalog = 1;

Базы данных с движком DataLakeCatalog можно создавать, используя следующий синтаксис:

CREATE DATABASE database_name
ENGINE = DataLakeCatalog(catalog_endpoint[, user, password])
SETTINGS
catalog_type,
[...]

Поддерживаются следующие настройки:

Настройка Описание
catalog_type Тип каталога: glue, unity (Delta), rest (Iceberg), hive, onelake (Iceberg), delta_sharing (Iceberg, плоские пространства имен), horizon (Snowflake Horizon Iceberg REST)
warehouse Имя хранилища или базы данных, используемое в каталоге.
catalog_credential Учетные данные для аутентификации в каталоге (например, API key или токен)
auth_header Пользовательский HTTP-заголовок для аутентификации в сервисе каталога
auth_scope Область действия OAuth2 для аутентификации (если используется OAuth)
storage_endpoint URL конечной точки нижележащего хранилища
oauth_server_uri URI сервера авторизации OAuth2 для аутентификации
vended_credentials Логическое значение, указывающее, следует ли использовать учетные данные, предоставленные каталогом (поддерживаются AWS S3 и Azure ADLS Gen2)
aws_access_key_id Идентификатор ключа доступа AWS для доступа к S3/Glue (если не используются предоставленные учетные данные)
aws_secret_access_key Секретный ключ доступа AWS для доступа к S3/Glue (если не используются предоставленные учетные данные)
aws_role_arn ARN роли IAM, которую нужно принять для доступа к AWS/Glue. Если параметр задан, ClickHouse использует AWS STS AssumeRole с базовыми учетными данными из aws_access_key_id и aws_secret_access_key, когда заданы оба параметра, или в противном случае из стандартной цепочки учетных данных AWS (роль должна доверять идентификационным данным, под которыми работает сервер).
aws_role_session_name Имя сеанса, используемое для вызова AWS STS AssumeRole. Необязательно; по умолчанию используется ClickHouseSession.
aws_external_id Внешний идентификатор, передаваемый в AWS STS AssumeRole, соответствующий условию sts:ExternalId в trust policy роли. Используйте это, если роль принадлежит третьей стороне, такой как ClickHouse Cloud.
region Регион AWS для сервиса (например, us-east-1)
dlf_access_key_id Идентификатор ключа доступа для доступа к DLF
dlf_access_key_secret Секретный ключ доступа для доступа к DLF
force_add_bucket При формировании URL объектного хранилища на основе расположения таблицы, предоставленного каталогом, и storage_endpoint добавляет в начало имя бакета/контейнера, даже если оно уже присутствует в конечной точке. Значение по умолчанию: false. Установите true для каталогов, которые возвращают пути без бакета и требуют его добавления на этапе формирования URL (пути в стиле Polaris).

Примеры

См. разделы ниже с примерами использования движка DataLakeCatalog:

  • Unity Catalog
  • Glue Catalog
  • Каталог OneLake Можно использовать при включении allow_experimental_database_iceberg или allow_database_iceberg.
CREATE DATABASE database_name
ENGINE = DataLakeCatalog(catalog_endpoint)
SETTINGS
    catalog_type = 'onelake',
    warehouse = warehouse,
    onelake_tenant_id = tenant_id,
    oauth_server_uri = server_uri,
    auth_scope = auth_scope,
    onelake_client_id = client_id,
    onelake_client_secret = client_secret;
SHOW TABLES IN database_name;
SELECT count() from database_name.table_name;

Чтобы пройти аутентификацию, не передавая секрет клиента, задайте для onelake_bearer_token заранее полученный Bearer-токен (с областью действия https://storage.azure.com) вместо onelake_client_id/onelake_client_secret. ClickHouse не обновляет токен, поэтому после истечения срока его действия базу данных нужно пересоздать.

Navigation