Snowflakeで Snowflake Open Catalog を使用して Apache Iceberg™ テーブルを使用する

Snowflakeの Apache Iceberg™ テーブルを使用して、 Snowflake Open Catalog を操作します。

Snowflake Open Catalog とは何ですか?

Open Catalog は、オープンソースのApache Iceberg REST プロトコルをベースに構築されたIcebergのカタログ実装です。詳細については、 Snowflake Open Catalog のドキュメントを参照してください。

Snowflakeは、 Open Catalog で作業するための以下のオプションをサポートしています。

考慮事項

Snowflakeを Open Catalog と併用する場合は、以下の点にご注意ください。

ストレージ

  • Snowflake管理Icebergテーブル と同様に、 Open Catalog で管理するIcebergテーブルを外部クラウドストレージに格納します。

  • SnowflakeのIcebergテーブルは 外部ボリューム を使用してクラウドストレージへのアクセスを提供し、 Open Catalog で管理されるテーブルは ストレージ構成 を使用します。

Snowflake管理Icebergテーブルを同期するための構成

テーブルアクセス

  • Open Catalog と同期したSnowflake管理Icebergテーブルは、 Open Catalog では読み取り専用です。

  • Snowflakeはクエリはできますが、 Open Catalog が管理するテーブルへの書き込みはできません。

用語の違い

このセクションでは、Snowflakeと Open Catalog の用語の主な違いをまとめます。

Snowflake用語

Open Catalog 用語

データベース

Open Catalog では、Snowflakeのデータベースのようなものである カタログ を使用します。Open Catalog では、1つまたは複数のカタログ リソースを作成して、Icebergテーブルを名前空間の下に整理します。詳細については、 Open Catalog ドキュメントの カタログ をご参照ください。

Snowflake管理のテーブルを Open Catalog と同期する際、Snowflakeは2つの親名前空間を使用して、テーブルのカタログ統合に関連するカタログとテーブルを同期します。名前空間は、Snowflakeにおけるテーブルのデータベースとスキーマに対応します。たとえば、Snowflakeに db1.public.table1 Iceberg テーブルが登録されていて、カタログ統合で catalog1 を指定すると、次の完全修飾名 catalog1.db1.public.table1 で Open Catalog と同期されます。

スキーマ

Open Catalog では、スキーマと名前空間の概念は同義であり、互換的に使用できます。

Namespace は Open Catalog ユーザーインターフェイスに表示されます。Open Catalog はオブジェクトのコレクションを保持するために名前空間を使用しており、 _namespace_ という用語は主に Open Catalog ドキュメントで使用されます。名前空間の詳細については、 名前空間 をご参照ください。

ただし、Apache Sparkなどのサードパーティのクエリエンジンを使用していて、 CREATE SCHEMA または CREATE DATABASE コマンドを実行すると、 Open Catalog に名前空間が作成されます。CREATE NAMESPACE コマンドを実行して名前空間を作成することもできます。

名前空間

Snowflakeと同様に、 Open Catalog も名前空間を使用しますが、Snowflakeの名前空間の使用方法と比較して重要な違いがあります。

Open Catalog のカタログは、ユーザーが定義する最上位の名前空間と、その下に定義する任意の数の入れ子になった名前空間から構成されます。

入れ子になった名前空間を使用すると、同じカタログ内で同じ名前のテーブルを登録できます。例えば、 customers という名前のカタログには、以下の customerdata テーブルを含めることができます。これらのテーブルは、最上位の名前空間の <リージョン> と、入れ子になった名前空間の <状態> の下にグループ化されています。

  • customers.northeast.maine.customerdata

  • customers.northeast.vermont.customerdata

また、 Open Catalog では、最上位の名前空間を含め、名前空間階層内の任意の名前空間の下にテーブルをグループ化できます。

サンプル Open Catalog 構造の概念図など、名前空間についての詳細については、 Open Catalogの主要な概念 をご参照ください。

ロール

Open Catalog の プリンシパルロール はSnowflakeのロールのようなものですが、重要な違いがあります。プリンシパルロールに権限を付与することはできません。代わりに、カタログロールに権限を付与し、それをプリンシパルロールに付与し、プリンシパルロールをサービスプリンシパルに付与して、サービスプリンシパルに権限を付与します。また、プリンシパルロールを他のプリンシパルロールに割り当てることはできません。サービスプリンシパルに付与できるプリンシパルロールは1つだけです。

プリンシパルロールを使用すると、サービスプリンシパルを論理的にグループ化できます。プリンシパルロールの範囲はすべてのカタログに及びます。また、プリンシパルロールにタイプの相違はありません。詳細については、 Open Catalog ドキュメントの プリンシパルロール をご参照ください。

データベースロール

Open Catalog は カタログロール を使用しますが、これはSnowflakeのデータベースロールのようなものです。カタログロールは、カタログまたはカタログ内のオブジェクトに対するアクションの権限セットを指定します。カタログロールの範囲は、それが作成されたカタログになります。

Open Catalog では、カタログロールに権限を付与します。次に、カタログロールをプリンシパルロールに付与し、プリンシパルロールをサービスプリンシパルに付与してリソースへのアクセス権を付与します。プリンシパルロールには複数のカタログロールを付与できますが、サービスプリンシパルには1つのプリンシパルロールしか付与できません。詳細については、 Open Catalog ドキュメントの カタログロール をご参照ください。

ユーザー

アクセス制御の文脈では、 Open Catalog にユーザーという概念はありません。

Open Catalog では、権限はユーザーではなく サービスプリンシパル に与えられます。クエリエンジンはサービスプリンシパルを使用してカタログに接続します。詳細については、 Open Catalog ドキュメントの サービスプリンシパル をご参照ください。