メインコンテンツへスキップ
メインコンテンツへスキップ

データカタログへの接続

前のセクションでは、ストレージパスを直接指定してオープンテーブル形式をクエリしました。実際の運用では、ほとんどの組織がデータカタログを通じてテーブルのメタデータを管理します。データカタログは、テーブルの保存場所、スキーマ、パーティションを追跡する一元的なレジストリです。ClickHouse を DataLakeCatalog データベースエンジンを使用してカタログに接続すると、カタログ全体が ClickHouse データベースとして公開されます。カタログ内のすべてのテーブルが自動的に表示され、完全な ClickHouse SQL でクエリできます。個々のテーブルパスを把握したり、テーブルごとに認証情報を管理したりする必要はありません。

このガイドでは、Databricks Unity Catalog への接続方法を説明します。ClickHouse は以下のカタログもサポートしています。完全なセットアップ手順については、各リファレンスガイドを参照してください。

CatalogReference guide
AWS GlueAWS Glue カタログ
Iceberg REST CatalogREST カタログ
LakekeeperLakekeeper カタログ
Project NessieNessie カタログ
Microsoft OneLakeFabric OneLake

Unity Catalog への接続

Beta feature. Learn more.

ここでは例として、Unity Catalog を使用します。

Databricks Unity Catalog は、Databricks の lakehouse データに対する一元的なガバナンスを提供します。

Databricks は、lakehouse 向けに複数のデータ形式をサポートしています。ClickHouse では、Unity Catalog のテーブルを Delta と Iceberg の両形式でクエリできます。

注記

Unity Catalog との統合は、マネージドテーブルと外部テーブルの両方で機能します。 この統合は現在、AWS でのみサポートされています。

Databricks で Unity を設定する

ClickHouse が Unity Catalog と連携できるようにするには、外部リーダーとの連携を許可するように Unity Catalog が設定されていることを確認する必要があります。これを行うには、「Unity Catalog への外部データアクセスを有効にする」 ガイドの手順に従ってください。

外部アクセスを有効にするだけでなく、統合を設定するプリンシパルに、テーブルを含むスキーマに対する EXTERNAL USE SCHEMA 権限 が付与されていることも確認してください。

カタログの設定が完了したら、ClickHouse 用の認証情報を生成する必要があります。Unity との連携モードに応じて、次の 2 つの方法を使用できます。

  • Iceberg クライアントの場合は、service principal を使用して認証します。

  • Delta クライアントの場合は、Personal Access Token (PAT) を使用します。

カタログに接続する

認証情報を使用して、該当するエンドポイントに接続し、Iceberg または Delta テーブルに対してクエリを実行できます。

Delta 形式のデータにアクセスするには、Unity catalog を使用します。

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

テーブルを一覧表示する

カタログに接続したら、テーブルを一覧表示できます。

SHOW TABLES FROM unity

┌─name───────────────────────────────────────────────┐
│ unity.logs                                         │
│ unity.single_day_log                               │
└────────────────────────────────────────────────────┘

31 rows in set.

テーブルスキーマの確認

標準の SHOW CREATE TABLE コマンドを使用すると、テーブルがどのように作成されたかを確認できます。

バッククォートが必要です

ネームスペースとテーブル名はバッククォートで囲んで指定する必要がある点に注意してください。ClickHouse は複数のネームスペースをサポートしていません。

以下は、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://...')

テーブルをクエリする

すべての ClickHouse 関数を使用できます。繰り返しになりますが、ネームスペース名とテーブル名はバッククォートで囲む必要があります。


SELECT count()
FROM unity.`icebench.single_day_log`

┌───count()─┐
│ 282634391 │ -- 282.63 million
└───────────┘

1 row in set. Elapsed: 1.265 sec.

完全なセットアップ手順については、Unity Catalog リファレンスガイドを参照してください。