ClickHouse prend en charge l’intégration avec plusieurs catalogues (Unity, Glue, Polaris, etc.). Ce guide vous guidera à travers les étapes nécessaires pour interroger vos données gérées par Databricks à l’aide de ClickHouse et de Unity Catalog.
Databricks prend en charge plusieurs formats de données dans son lakehouse. Avec ClickHouse, vous pouvez interroger les tables Unity Catalog aussi bien au format Delta qu’au format Iceberg.
Cette fonctionnalité étant expérimentale, vous devrez l’activer à l’aide de :
SET allow_experimental_database_unity_catalog = 1;
Configuration de Unity dans Databricks
Pour permettre à ClickHouse d’interagir avec Unity Catalog, vous devez vous assurer que Unity Catalog est configuré pour autoriser les interactions avec un lecteur externe. Pour ce faire, suivez le guide « Activer l’accès externe aux données pour Unity Catalog ».
Une fois votre catalogue configuré, vous devez générer des credentials pour ClickHouse. Deux méthodes différentes peuvent être utilisées, selon votre mode d’interaction avec Unity :
-
Pour les clients Iceberg, utilisez une authentication via un service principal.
-
Pour les clients Delta, utilisez un Personal Access Token (PAT).
Privilèges requis pour le jeton PAT
Lorsque vous utilisez un PAT pour un accès en lecture, le jeton doit disposer des autorisations permettant à ClickHouse de lister et de lire les métadonnées de Unity Catalog. Assurez-vous que le PAT possède au minimum le privilège EXTERNAL USE SCHEMA, ainsi que l’autorisation SELECT sur la table, USE CATALOG sur son catalogue parent et USE SCHEMA sur son schéma parent.
Créer une connexion entre Unity Catalog et ClickHouse
Une fois Unity Catalog configuré et l’authentification en place, établissez une connexion entre ClickHouse et 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'
Pour accéder aux tables Iceberg gérées :
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'
Interroger des tables Unity Catalog avec ClickHouse
Maintenant que la connexion est établie, vous pouvez commencer à exécuter des requêtes via Unity Catalog. Par exemple :
┌─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 │
└────────────────────┘
Pour interroger une table :
SELECT count(*) FROM `uniform.delta_hits`
Backticks obligatoiresLes backticks sont obligatoires, car ClickHouse ne prend pas en charge plusieurs espaces de noms.
Pour consulter la DDL de la table :
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>);
Chargement de données depuis votre lac de données dans ClickHouse
Si vous devez charger des données depuis Databricks dans ClickHouse, commencez par créer une table ClickHouse locale :
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);
Chargez ensuite les données de votre table Unity Catalog à l’aide d’un INSERT INTO SELECT :
INSERT INTO hits SELECT * FROM unity_uniform.`uniform.delta_hits`;