Passer au contenu principal
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.

Lire 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'

Lire des tables Iceberg

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 :
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 │
└────────────────────┘
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`;
Dernière modification le 29 juin 2026