Snowflakeオープンカタログの概要

Snowflakeオープンカタログは、Apache Iceberg™テーブルのためのカタログ実装であり、オープンソースのApache Iceberg™ REST プロトコルに基づいて構築されています。

オープンカタログにより、異なる REST 互換クエリエンジン間でIcebergテーブルへの一元化された安全な読み取り/書き込みアクセスを提供できます。

オープンカタログは現在、Snowflakeで管理されるインフラストラクチャでホストされたサービスとして提供されています。

オープンカタログの概念図

サインアップ

オープンカタログには、以下のサインアップオプションがあります。

  • 既存のSnowflakeをご利用のお客様: 組織管理者として既存のSnowflakeアカウントにサインインし、Snowflake組織に新しいオープンカタログアカウントを作成します。Snowflakeで ORGADMIN ロールを持つユーザーは、Snowflakeからオープンカタログアカウントを管理できます。手順については、Snowflakeオープンカタログアカウントの作成をご参照ください。

  • 既存のSnowflakeのお客様でない場合: Snowflakeのトライアルアカウントにサインアップすると、Snowflakeオープンカタログを30日間無料でお試しいただけます。手順については、Snowflakeオープンカタログを無料で試すをご参照ください。

主な概念

このセクションでは、Snowflakeでホストされているオープンカタログの使用に関連する主要な概念を紹介します。

以下の図では、Catalog1のネストされた名前空間があるオープンカタログ構造のサンプルを示しています。Catalog2またはCatalog3のテーブルまたは名前空間はまだ作成されていません。

オープンカタログの構造例を示す図

カタログ

オープンカタログでは、Icebergテーブルを整理するために1つまたは複数のカタログリソースを作成できます。

S3、Azure、Google Cloud Storageのストレージ構成で値を設定してカタログを構成します。Icebergカタログは、クエリエンジンがテーブルを管理し、整理できるようにします。カタログはApache Iceberg™テーブル仕様の最初の構造上のレイヤーを形成し、以下のタスクをサポートする必要があります。

  • 1つ以上のIcebergテーブルの現在のメタデータポインターを格納する。メタデータポインターは、テーブル名とそのテーブルの現在のメタデータファイルの場所をマッピングします。

  • アトミック操作を実行することで、テーブルの現在のメタデータポインターをテーブルの新しいバージョンのメタデータポインターに更新できます。

Icebergカタログについての詳細は、Apache Iceberg™ドキュメントをご参照ください。

カタログの種類

カタログは以下の2つの種類のいずれかになります。

  • 内部: カタログはオープンカタログによって管理されます。このカタログからのテーブルは、オープンカタログで読み取りおよび書き込みできます。

  • 外部: カタログは、他のIcebergカタログプロバイダー(例えば、Snowflake、Glue、Dremio Arctic)によって外部管理されています。このカタログからのテーブルはオープンカタログに同期されます。これらのテーブルは、オープンカタログでは読み取り専用です。現在のリリースでは、Snowflakeの外部カタログのみが提供されています。

カタログは、S3、Azureストレージ、または GCS にポイントできるストレージ構成で設定されます。

新しいカタログを作成するには、カタログの作成をご参照ください。

名前空間

カタログ内のIcebergテーブルを論理的にグループ化するために 名前空間 を作成します。カタログには複数の名前空間を指定できます。ネストされた名前空間を作成することもできます。Icebergテーブルは名前空間に属しています。

Apache Iceberg™テーブルとカタログ

内部カタログでは、Icebergテーブルはオープンカタログに登録されていますが、クエリエンジンを介して読み取りおよび書き込みされます。テーブルデータとメタデータは、外部クラウドストレージに保管されます。このテーブルでは、Icebergカタログとしてオープンカタログを使用しています。

IcebergカタログとしてSnowflakeを使用しているテーブル(Snowflakeで管理されるテーブル)がある場合、オープンカタログでこれらのテーブルを外部カタログに同期できます。このカタログをオープンカタログに同期すると、オープンカタログに外部カタログとして表示されます。テーブルデータとメタデータは、外部クラウドストレージに保管されます。Snowflakeクエリエンジンは、これらのテーブルから読み取り、またはこれらのテーブルに書き込むことができます。しかし、他のクエリエンジンができるのは、これらのテーブルからの読み取りのみです。

重要

カタログに定義されたアクセス権限が正しく実施されるためには、以下の条件を満たす必要があります。

  • ディレクトリに1つのテーブルに属するデータファイルのみが含まれている。

  • ディレクトリ階層がカタログの名前空間階層と一致する。

例えば、カタログに以下のような項目がある場合:

  • トップレベル名前空間のnamespace1

  • ネストされた名前空間であるnamespace1a

  • ネストされた名前空間namespace1aの下にグループ化されたcustomersテーブル。

  • ネストされた名前空間namespace1aの下にグループ化されたordersテーブル。

カタログのディレクトリ階層は、この構造に従う必要があります。

  • /namespace1/namespace1a/customers/<customersテーブルのファイル のみ>

  • /namespace1/namespace1a/orders/<ordersテーブルのファイル のみ>

サービスプリンシパル

サービスプリンシパルは、オープンカタログで作成するエンティティです。各サービスプリンシパルは、オープンカタログへの接続に使用する認証情報をカプセル化します。

クエリエンジンはサービスプリンシパルを使用してカタログに接続します。

オープンカタログは、各サービスプリンシパルのクライアント ID とクライアントシークレットのペアを生成します。

以下の表は、オープンカタログで作成する可能性があるサービスプリンシパルの例を示しています。

サービス接続名

目的

Flinkインジェスチョン

Apache Flink®がストリーミングデータをApache Iceberg™テーブルにインジェストする。

Spark ETL パイプライン

Apache Spark™がIcebergテーブルに対して ETL パイプラインジョブを実行する。

Snowflakeデータパイプライン

SnowflakeがApache Iceberg™テーブルのデータを変換するためのデータパイプラインを実行する。

Trino BI ダッシュボード

Trinoがダッシュボードを強化するための BI クエリを実行する。

Snowflake AI チーム

SnowflakeがApache Iceberg™テーブルのデータに対して AI ジョブを実行する。

サービス接続

サービス接続は、オープンカタログからの読み取りとオープンカタログへの書き込みが可能な REST 互換エンジン(Apache Spark™、Apache Flink®、またはTrinoなど)を表します。新しいサービス接続を作成する場合、オープンカタログ管理者は新しいサービス接続で作成されるサービスプリンシパルに新規または既存のプリンシパルロールを付与します。プリンシパルロールとは、オープンカタログのリソースで、オープンカタログのサービスプリンシパルを論理的にグループ化し、セキュリティ保護可能なオブジェクトに権限を付与するために使用できます。詳細については、プリンシパルロールをご参照ください。オープンカタログでは、ロールベースのアクセス制御(RBAC)モデルを使用して、サービスプリンシパルにリソースへのアクセス権限を付与します。詳細については、アクセス制御をご参照ください。このモデルの図は、RBAC モデルをご参照ください。

オープンカタログ管理者が新しいサービス接続のサービスプリンシパルに新しいプリンシパルロールを付与した場合、サービスプリンシパルにはまだ権限が付与されていません。新しいサービス接続が接続するカタログを確保する場合、オープンカタログ管理者はカタログロールに権限を付与し、これらのカタログロールを新しいプリンシパルロールに付与します。その結果、新しいサービス接続のサービスプリンシパルにはこれらの権限があります。カタログロールの詳細については、カタログロールをご参照ください。

オープンカタログ管理者が新しいサービス接続のサービスプリンシパルに既存のプリンシパルロールを付与する場合、サービスプリンシパルには既存のプリンシパルロールに付与されたカタログロールに付与されている権限が与えられます。必要に応じて、オープンカタログ管理者は、サービスプリンシパルに付与される権限を調整するために、既存のプリンシパルロールに追加のカタログロールを付与したり、カタログロールを削除できます。オープンカタログでの RBAC の仕組みの例については、RBAC の例をご参照ください。

ストレージ構成

ストレージ構成は、外部クラウドストレージ用に生成されたIDおよびアクセス管理(IAM)エンティティを格納し、カタログの作成時に作成されます。ストレージ構成は、オープンカタログをクラウドストレージに接続するための値を設定するために使用されます。カタログの作成プロセス中に IAM エンティティが生成され、クラウドストレージプロバイダーとオープンカタログの信頼関係を作成するために使用されます。

カタログを作成する際、外部クラウドストレージに関する以下の情報を提供します。

クラウドストレージプロバイダー

情報

Amazon S3

<ul><li>Amazon S3バケットのデフォルトのベースロケーション</li><li>Amazon S3バケットのロケーション</li><li>S3ロール ARN</li><li>外部 ID(オプション)</li></ul>

Google Cloud Storage(GCS)

<ul><li>GCS バケットのデフォルトのベースロケーション</li><li>GCS バケットのロケーション</li></ul>

Azure

<ul><li>Microsoft Azureコンテナのデフォルトのベースロケーション</li><li>Microsoft Azureコンテナのロケーション</li><li>Azureテナント ID</li></ul>

ワークフロー例

以下のワークフロー例では、BobがTable1というApache Iceberg™テーブルを作成し、AliceがTable1からデータを読み取ります。

  1. BobはApache Spark™を使用して、Catalog1カタログのNamespace1名前空間の下にTable1テーブルを作成し、Table1に値を挿入します。

    BobがTable1を作成し、そこにデータを挿入できるのは、これらのアクションを実行する権限を持つサービスプリンシパルとのサービス接続を使用しているからです。

  2. AliceはSnowflakeを使用してTable1からデータを読み取ります。

    Aliceは、このアクションを実行する権限を持つカタログ統合のサービスプリンシパルとのサービス接続を使用しているため、Table1からデータを読み取ることができます。AliceはTable1からデータを読み取るためにSnowflakeでアンマネージドテーブルを作成します。

オープンカタログのワークフロー例を示す図

セキュリティとアクセス制御

このセクションでは、セキュリティとアクセス制御について説明します。

認証情報のベンディング

サービス接続とのやり取りをセキュリティで保護するために、オープンカタログはクエリ実行中にクエリエンジンに対して仮のストレージ認証情報を提供します。これらの認証情報により、Icebergテーブル用の外部クラウドストレージへのアクセスを必要とせずに、クエリエンジンがクエリを実行できるようになります。このプロセスは認証情報のベンディングと呼ばれています。

IDおよびアクセス管理(IAM)

SnowflakeはIDおよびアクセス管理(IAM)エンティティを使用して、テーブルデータ、Icebergメタデータ、およびテーブルスキーマ、パーティション、その他のメタデータを格納するマニフェストファイルにアクセスするために、ストレージに安全に接続します。オープンカタログは、ストレージ場所の IAM エンティティを保持します。

アクセス制御

オープンカタログは、サービスに登録されたすべてのテーブルにわたって構成したアクセス制御を実施し、クエリエンジンからのすべてのクエリのセキュリティを一貫した方法で管理します。

オープンカタログはロールベースのアクセス制御(RBAC)モデルを使用しており、オープンカタログサービスプリンシパルのカタログ、名前空間、およびテーブルへのアクセスを一元的に構成できます。

オープンカタログ RBAC は、権限を委任するために2つの異なるロール型を使用します。

  • プリンシパルロール: オープンカタログのサービスプリンシパルに付与され、サービスプリンシパルに付与する他のアクセス制御システムのロールに似ています。

  • カタログロール: オープンカタログリソースの特定の権限で構成され、プリンシパルロールに付与されます。

詳細については、アクセス制御をご参照ください。

請求

オープンカタログは一般公開後6か月間無料です。請求は2025年4月30日から開始されます。

請求が開始されると、Snowflakeは、オープンカタログサービスでサポートされている REST APIs へのリクエストの料金をお客様のアカウントに請求します。詳細については、Snowflakeサービス消費テーブルのサーバーレス機能テーブルをご参照ください。

Snowflakeでは、Icebergテーブルの保管コストをお客様のアカウントに請求することはありません。クラウドストレージプロバイダーがデータストレージの使用料を直接請求します。