Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Snowflake Horizon カタログ

ベータ機能

ClickHouse は、Horizon が提供する Iceberg REST API (Apache Polaris を基盤とする) を介して、Snowflake Horizon Catalogに接続できます。 これにより、catalog_type = 'horizon' を指定した DataLakeCatalog データベースエンジンを使用して、ClickHouse から Snowflake 管理の Iceberg テーブルの読み取りと書き込みを行えます。

Horizon は Snowflake Open Catalog / セルフホスト型 Polaris と関連していますが、同じものではありません。

Open Catalog / Polaris (catalog_type = 'rest') Horizon (catalog_type = 'horizon')
エンドポイント Open Catalog またはセルフホスト型 Polaris の URI https://<org>-<account>.snowflakecomputing.com/polaris/api/catalog
ウェアハウス Polaris カタログ / ウェアハウス名 Snowflake データベース名 (通常は大文字)
認証スコープ PRINCIPAL_ROLE:ALL (一般的) session:role:<ROLE>
認証情報 client_id:client_secret PAT またはキーペア JWT を catalog_credential として使用 (OAuth client_secret。':' で分割しない) 、または Bearer auth_header

前提条件

  • Snowflake 管理の Iceberg テーブルがある Snowflake アカウント
  • Horizon Iceberg REST エンドポイント: https://<organization>-<account>.snowflakecomputing.com/polaris/api/catalog
  • Iceberg テーブルに対する権限を持つ Snowflake ロール (INSERT を実行する場合は書き込み権限も必要)
  • 以下のいずれかによる認証:
    • プログラムによるアクセストークン (PAT)
    • アクセストークンと交換するキーペア JWT
    • 外部 OAuth アクセストークン (Bearer auth_header として使用)
  • ClickHouse からアクセス可能なオブジェクトストレージ (Snowflake から提供される認証情報を推奨)
  • DataLakeCatalog の Iceberg サポートを備えた ClickHouse

接続を作成する

SET allow_experimental_database_iceberg = 1;

CREATE DATABASE horizon_catalog
ENGINE = DataLakeCatalog('https://<org>-<account>.snowflakecomputing.com/polaris/api/catalog')
SETTINGS
    catalog_type = 'horizon',
    warehouse = 'ICEBERG_TEST_DB',
    catalog_credential = '<PAT>',
    auth_scope = 'session:role:DATA_ENGINEER',
    oauth_server_uri = 'https://<org>-<account>.snowflakecomputing.com/polaris/api/catalog/v1/oauth/tokens',
    vended_credentials = 1;

warehouse には、Snowflake 仮想ウェアハウスではなく、Snowflake データベース名を指定する必要があります。 引用符で囲まれていない Snowflake 識別子は大文字で扱われます。

オプション B: 事前に交換した Bearer アクセストークン

CREATE DATABASE horizon_catalog
ENGINE = DataLakeCatalog('https://<org>-<account>.snowflakecomputing.com/polaris/api/catalog')
SETTINGS
    catalog_type = 'horizon',
    warehouse = 'ICEBERG_TEST_DB',
    auth_header = 'Authorization: Bearer <ACCESS_TOKEN>',
    vended_credentials = 1;

Icebergテーブルのクエリ

USE horizon_catalog;
SHOW TABLES;

SELECT count(*) FROM `PUBLIC.test_table`;
SHOW CREATE TABLE `PUBLIC.test_table`;

書き込みパス

INSERT/UPDATE/DELETE (テーブル作成時は CREATE ICEBERG TABLE) の権限を持つロールを使用すると、 ClickHouse は同じカタログを介して書き込めます。

-- Insert into an existing Snowflake-managed Iceberg table
INSERT INTO horizon_catalog.`PUBLIC.test_table`
SELECT
    number AS id,
    concat('name_', toString(number)) AS name
FROM numbers(100);

-- Create a new Iceberg table in the Horizon catalog (requires CREATE ICEBERG TABLE)
CREATE TABLE horizon_catalog.`PUBLIC.clickhouse_written`
(
    id Int64,
    name String
)
ENGINE = Iceberg;

CREATE TABLE の正確な構文は、ご使用のバージョンでの REST カタログに対する ClickHouse Iceberg / DataLakeCatalog の書き込みサポートに従います。Snowflake の権限不足は、カタログの HTTP エラーとして報告されます。

MergeTree へのロード

CREATE TABLE my_clickhouse_table
(
    id Int64,
    name String
)
ENGINE = MergeTree
ORDER BY id;

INSERT INTO my_clickhouse_table
SELECT * FROM horizon_catalog.`PUBLIC.test_table`;
Navigation