Перейти к основному содержимому
Перейти к основному содержимому

Unity Catalog

Beta feature. Learn more.

ClickHouse поддерживает интеграцию с несколькими каталогами (Unity, Glue, Polaris и т. д.). В этом руководстве описаны шаги для выполнения запросов к вашим данным, управляемым Databricks, с помощью ClickHouse и Unity Catalog.

Databricks поддерживает несколько форматов данных для своей lakehouse-платформы. С ClickHouse вы можете выполнять запросы к таблицам Unity Catalog в форматах Delta и Iceberg.

Примечание

Поскольку эта функция является экспериментальной, вам нужно включить её с помощью: SET allow_experimental_database_unity_catalog = 1;

Настройка Unity в Databricks

Чтобы разрешить ClickHouse взаимодействовать с каталогом Unity, необходимо убедиться, что Unity Catalog настроен на взаимодействие с внешним клиентом. Этого можно добиться, следуя руководству "Enable external data access to Unity Catalog".

После того как ваш каталог будет настроен, необходимо сгенерировать учетные данные для ClickHouse. В зависимости от режима взаимодействия с Unity можно использовать два разных метода:

  • Для клиентов Iceberg используйте аутентификацию через service principal.

  • Для клиентов Delta используйте Personal Access Token (PAT).

Необходимые разрешения PAT-токена

При использовании PAT для доступа на чтение токен должен иметь права, которые позволяют ClickHouse перечислять и читать метаданные Unity Catalog. Убедитесь, что у PAT как минимум есть привилегия EXTERNAL USE SCHEMA (privilege), а также право SELECT на таблицу, USE CATALOG на родительский каталог и USE SCHEMA на родительскую схему.

Создание подключения между Unity Catalog и ClickHouse

После настройки Unity Catalog и аутентификации установите подключение между ClickHouse и Unity Catalog.

Чтение Delta

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

Чтобы получить доступ к управляемым таблицам 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 из ClickHouse

Теперь, когда соединение установлено, вы можете начинать выполнять запросы через каталог Unity. Например:

USE unity;

SHOW TABLES;

┌─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                                 │
└────────────────────────────────────────────────────┘
SHOW TABLES

┌─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`;