Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Connexion à un catalogue de données

Dans la section précédente, vous avez interrogé des formats de table ouverts en indiquant directement les chemins de stockage. En pratique, la plupart des organisations gèrent les métadonnées des tables via un catalogue de données — un registre central qui recense les emplacements des tables, les schémas et les partitions. Lorsque vous connectez ClickHouse à un catalogue à l’aide du moteur de base de données DataLakeCatalog, l’ensemble du catalogue est exposé sous la forme d’une base de données ClickHouse. Chaque table du catalogue apparaît automatiquement et peut être interrogée avec l’ensemble de ClickHouse SQL — nul besoin de connaître le chemin de chaque table ni de gérer des identifiants distincts pour chacune d’elles.

Ce guide explique comment se connecter à Databricks Unity Catalog. ClickHouse prend également en charge les catalogues suivants — consultez chaque guide de référence pour obtenir les instructions de configuration complètes :

Catalogue Guide de référence
AWS Glue catalogue AWS Glue
Catalogue REST Iceberg catalogue REST
Lakekeeper catalogue Lakekeeper
Project Nessie catalogue Nessie
Microsoft OneLake Fabric OneLake
SeaweedFS catalogue SeaweedFS

Se connecter à Unity Catalog

Fonctionnalité en bêta

À titre d’exemple, nous utiliserons Unity Catalog.

Databricks Unity Catalog fournit une gouvernance centralisée des données lakehouse de Databricks.

Databricks prend en charge plusieurs formats de données pour son lakehouse. Avec ClickHouse, vous pouvez interroger les tables Delta et Iceberg de Unity Catalog qui utilisent des emplacements de stockage externes.

Configuration de Unity Catalog dans Databricks

Pour permettre à ClickHouse d’interagir avec Unity Catalog, vous devez vous assurer que celui-ci est configuré pour autoriser l’interaction avec un lecteur externe. Pour cela, suivez le guide « Enable external data access to Unity Catalog ».

En plus d’activer l’accès externe, assurez-vous que le principal qui configure l’intégration dispose du privilège EXTERNAL USE SCHEMA sur le schéma contenant les tables.

Une fois votre catalogue configuré, vous devez générer des informations d’identification pour ClickHouse. Deux méthodes différentes peuvent être utilisées, selon votre mode d’interaction avec Unity :

  • Pour les clients Iceberg, authentifiez-vous avec un service principal.

  • Pour les clients Delta, utilisez un jeton d’accès personnel (PAT).

Se connecter au catalogue

À l’aide de ces informations d’identification, vous pouvez vous connecter à l’endpoint approprié pour interroger les tables Iceberg ou Delta.

Le Unity catalog doit être utilisé pour accéder aux données au format Delta.

SET allow_experimental_database_unity_catalog = 1;

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

Lister les tables

Une fois la connexion à votre catalogue établie, vous pouvez afficher la liste des tables.

SHOW TABLES FROM unity
┌─name───────────────────────────────────────────────┐
│ unity.logs                                         │
│ unity.single_day_log                               │
└────────────────────────────────────────────────────┘

31 rows in set.

Exploration des schémas des tables

Nous pouvons utiliser la commande standard SHOW CREATE TABLE pour voir comment les tables ont été créées.

La suite suppose l’interrogation du catalogue REST Iceberg :

SHOW CREATE TABLE unity.`icebench.single_day_log`

CREATE TABLE unity.`icebench.single_day_log`
(
    `pull_request_number` Nullable(Int64),
    `commit_sha` Nullable(String),
    `check_start_time` Nullable(DateTime64(6, 'UTC')),
    `check_name` Nullable(String),
    `instance_type` Nullable(String),
    `instance_id` Nullable(String),
    `event_date` Nullable(Date32),
    `event_time` Nullable(DateTime64(6, 'UTC')),
    `event_time_microseconds` Nullable(DateTime64(6, 'UTC')),
    `thread_name` Nullable(String),
    `thread_id` Nullable(Decimal(20, 0)),
    `level` Nullable(String),
    `query_id` Nullable(String),
    `logger_name` Nullable(String),
    `message` Nullable(String),
    `revision` Nullable(Int64),
    `source_file` Nullable(String),
    `source_line` Nullable(Decimal(20, 0)),
    `message_format_string` Nullable(String)
)
ENGINE = Iceberg('s3://...')

Interroger une table

Toutes les fonctions ClickHouse sont prises en charge. Là encore, l’espace de noms et le nom de la table doivent être délimités par des backticks.

SELECT count()
FROM unity.`icebench.single_day_log`
┌───count()─┐
│ 282634391 │ -- 282.63 million
└───────────┘

1 row in set. Elapsed: 1.265 sec.

Pour des instructions de configuration complètes, consultez le guide de référence sur Unity Catalog.

Navigation