ClickHouse поддерживает интеграцию с несколькими каталогами (Unity, Glue, Polaris и т. д.). В этом руководстве показано, как выполнять запросы к данным, управляемым Databricks, с помощью ClickHouse и Unity Catalog.
Databricks поддерживает несколько форматов данных для своей lakehouse-платформы. С помощью ClickHouse вы можете выполнять запросы к таблицам Unity Catalog в форматах Delta и Iceberg.
Поскольку эта возможность является экспериментальной, вам потребуется включить ее с помощью:
SET allow_experimental_database_unity_catalog = 1;
Настройка Unity Catalog в Databricks
Чтобы ClickHouse мог взаимодействовать с Unity Catalog, необходимо убедиться, что Unity Catalog настроен для работы с внешним клиентом чтения. Для этого следуйте руководству «Enable external data access to Unity Catalog».
После настройки каталога необходимо сгенерировать учетные данные для ClickHouse. В зависимости от режима взаимодействия с Unity можно использовать два разных метода:
-
Для клиентов Iceberg используйте аутентификацию через сервисный субъект.
-
Для клиентов Delta используйте токен персонального доступа (PAT).
Требуемые разрешения PAT-токена
При использовании PAT для доступа на чтение токен должен иметь разрешения, позволяющие ClickHouse просматривать и считывать метаданные Unity Catalog. Убедитесь, что у PAT есть как минимум привилегия EXTERNAL USE SCHEMA, а также разрешение SELECT на таблицу, USE CATALOG на родительский каталог и USE SCHEMA на родительскую схему.
Создание соединения между Unity Catalog и ClickHouse
После настройки Unity Catalog и аутентификации установите соединение между ClickHouse и Unity Catalog.
CREATE DATABASE unity
ENGINE = DataLakeCatalog('https://<workspace-id>.cloud.databricks.com/api/2.1/unity-catalog')
SETTINGS warehouse = 'CATALOG_NAME', catalog_credential = '<PAT>', catalog_type = 'unity'
Чтобы получить доступ к управляемым таблицам Iceberg:
CREATE DATABASE unity
ENGINE = DataLakeCatalog('https://<workspace-id>.cloud.databricks.com/api/2.1/unity-catalog/iceberg-rest')
SETTINGS catalog_type = 'rest', catalog_credential = '<client-id>:<client-secret>', warehouse = 'workspace',
oauth_server_uri = 'https://<workspace-id>.cloud.databricks.com/oidc/v1/token', auth_scope = 'all-apis,sql'
Запросы к таблицам Unity Catalog с помощью ClickHouse
Теперь, когда подключение настроено, можно выполнять запросы через Unity Catalog. Например:
┌─name───────────────────────────────────────────────┐
│ clickbench.delta_hits │
│ demo.fake_user │
│ information_schema.catalog_privileges │
│ information_schema.catalog_tags │
│ information_schema.catalogs │
│ information_schema.check_constraints │
│ information_schema.column_masks │
│ information_schema.column_tags │
│ information_schema.columns │
│ information_schema.constraint_column_usage │
│ information_schema.constraint_table_usage │
│ information_schema.information_schema_catalog_name │
│ information_schema.key_column_usage │
│ information_schema.parameters │
│ information_schema.referential_constraints │
│ information_schema.routine_columns │
│ information_schema.routine_privileges │
│ information_schema.routines │
│ information_schema.row_filters │
│ information_schema.schema_privileges │
│ information_schema.schema_tags │
│ information_schema.schemata │
│ information_schema.table_constraints │
│ information_schema.table_privileges │
│ information_schema.table_tags │
│ information_schema.tables │
│ information_schema.views │
│ information_schema.volume_privileges │
│ information_schema.volume_tags │
│ information_schema.volumes │
│ uniform.delta_hits │
└────────────────────────────────────────────────────┘
┌─name───────────────┐
│ uniform.delta_hits │
└────────────────────┘
Чтобы выполнить запрос к таблице:
SELECT count(*) FROM `uniform.delta_hits`
Обратные кавычки обязательныОбратные кавычки обязательны, поскольку ClickHouse не поддерживает более одного пространства имен.
Чтобы посмотреть DDL таблицы:
SHOW CREATE TABLE `uniform.delta_hits`
CREATE TABLE unity_uniform.`uniform.delta_hits`
(
`WatchID` Int64,
`JavaEnable` Int32,
`Title` String,
`GoodEvent` Int32,
`EventTime` DateTime64(6, 'UTC'),
`EventDate` Date,
`CounterID` Int32,
`ClientIP` Int32,
...
`FromTag` String,
`HasGCLID` Int32,
`RefererHash` Int64,
`URLHash` Int64,
`CLID` Int32
)
ENGINE = Iceberg('s3://<path>);
Загрузка данных из вашего озера данных в ClickHouse
Если вам нужно загрузить данные из Databricks в ClickHouse, сначала создайте локальную таблицу в ClickHouse:
CREATE TABLE hits
(
`WatchID` Int64,
`JavaEnable` Int32,
`Title` String,
`GoodEvent` Int32,
`EventTime` DateTime64(6, 'UTC'),
`EventDate` Date,
`CounterID` Int32,
`ClientIP` Int32,
...
`FromTag` String,
`HasGCLID` Int32,
`RefererHash` Int64,
`URLHash` Int64,
`CLID` Int32
)
PRIMARY KEY (CounterID, EventDate, UserID, EventTime, WatchID);
Затем загрузите данные из таблицы в Unity Catalog с помощью INSERT INTO SELECT:
INSERT INTO hits SELECT * FROM unity_uniform.`uniform.delta_hits`;
Последнее изменение 10 июня 2026 г.