Snowflake Horizon Catalogを介した外部エンジンによる|iceberg-tm|テーブルへのアクセス¶
Snowflake Horizon Catalogを介する外部クエリエンジンを使用して、Snowflake管理の|iceberg-tm|テーブルにアクセスします。外部エンジンとの相互運用性を確保するために、`Apache Polaris™<https://github.com/apache/polaris>`_はHorizon Catalogに統合されています。さらに、Horizonカタログは Apache Iceberg™ REST API (Horizon Iceberg REST カタログ API )を公開します。このAPIにより、外部クエリエンジンを使用してテーブルにアクセスできます。
既存のすべてのSnowflakeアカウントで利用可能なHorizon Catalogを使用して、外部クエリエンジンでSnowflake管理のIcebergテーブルを読み書きできます。Horizon Catalogを使用すると、Snowflake Open Catalogを介してSnowflake管理のIcebergテーブルを同期したり、外部クエリエンジンを使用してSnowflake管理のIcebergテーブルにアクセスするために別のSnowflake Open Catalogアカウントを作成したりする必要がありません。
Icebergテーブルのクエリ¶
Horizonカタログを介して外部クエリエンジンをIcebergテーブルに接続することで、次のタスクを実行できます。
オープンIceberg REST プロトコルをサポートする外部クエリエンジンを使用して、Apache Spark™など、これらのテーブルをクエリします。
単一のHorizonカタログエンドポイントを使用して、新規または既存のSnowflakeアカウント内の既存および新規のSnowflake管理のIcebergテーブルをクエリします。
Snowflakeの既存のユーザー、ロール、ポリシー、および認証を使用してテーブルをクエリします。
ベンディングされた認証情報を使用します。
Snowflake Horizonカタログの詳細については、 Snowflake Horizon カタログ をご参照ください。
Icebergテーブルへの書き込み¶
Horizon Catalogを介した外部クエリエンジンを使用したIcebergテーブルへの書き込みは公開プレビュー中です。テーブルに書き込むには、:ref:`外部クエリエンジンを使用してIcebergテーブルにアクセスするワークフロー<label-tables_iceberg_query_using_external_query_engine_snowflake_horizon_workflow>`に従ってください。アクセス制御を構成するときは、必ず:ref:`テーブルへの書き込みアクセスを構成<label-tables_iceberg_query_using_external_query_engine_snowflake_horizon_configure_write_access>`してください。
その後、Icebergテーブルに書き込みます。
次の図は、Horizon Catalogを介してSnowflake管理のIcebergテーブルの読み書きを行う外部クエリエンジンと、これらのテーブルの読み書きを行うSnowflakeを示しています。
請求¶
Horizon Iceberg REST カタログ API はすべてのSnowflakeエディションで利用可能です。
その API リクエストは100万件のコールごとに0.5クレジットとして請求され、クラウドサービスとして課金されます。
クロスリージョンデータアクセスの場合、 Snowflakeサービス利用表 に記載されている標準のクロスリージョンデータエグレス料金が適用されます。
注釈
この機能の請求開始は2026年半ばです。変更される可能性があります。
サポートされる外部エンジンとカタログ¶
以下の表は、すべてを網羅しているわけではありませんが、Horizon Iceberg REST カタログ API と統合する多くの外部エンジンとカタログを示しています。この統合により、外部システムからSnowflakeが管理するIcebergテーブルにアクセスできるようになります。
サポートされている外部エンジン¶
次の外部クエリエンジンは、Horizon Iceberg REST カタログ API と統合されます。
製品 |
Horizonカタログを介してSnowflakeが管理するIcebergテーブルにアクセスする |
|---|---|
Apache Doris™ |
✔ |
Apache Flink™ |
✔ |
Apache Spark™ |
✔ |
Dremio |
✔ |
DuckDB |
✔ |
PyIceberg |
✔ |
StarRocks |
✔ |
Trino |
✔ |
サポートされる外部カタログ¶
次の外部カタログは、Horizon Iceberg REST カタログ API と統合されます。
製品 |
Horizonカタログを介してSnowflakeが管理するIcebergテーブルにアクセスする |
コメント |
|---|---|---|
Apache Polaris™ |
✔ |
|
AWS Glue |
✔ |
この統合の構成方法については、 AWS Big Data Blog内の AWS Glueデータカタログでカタログフェデレーションを使用してSnowflake Horizonカタログデータにアクセスする をご参照ください。 |
Palantir Foundry |
✔ |
この統合の構成方法については、Palantirドキュメント内の Icebergテーブル(仮想テーブルのみ) をご参照ください。 |
Databricks Unityカタログ |
発表されていません |
|
Google BigLake Metastore |
開発中 |
|
Microsoft Fabric / Synapse |
開発中 |
前提条件¶
アクセスするIcebergテーブルを含むSnowflakeアカウントのアカウント識別子を取得します。手順については、 アカウント識別子 をご参照ください。次の場合にこの識別子を指定します。 Icebergテーブルに外部クエリエンジンを接続する 。
Tip
SQL を使用してアカウント識別子を取得するには次のコマンドを実行できます。
(オプション)プライベート接続¶
安全な接続のために、Horizon カタログエンドポイントにアクセスする際の、Snowflakeアカウント用 :doc:` インバウンド </user-guide/private-connectivity-inbound>` および :doc:` アウトバウンド </user-guide/private-connectivity-outbound>` プライベート接続の構成を検討してください。
注釈
プライベート接続は、Amazon S3またはAzure Storage(ADLS)に保存されているSnowflake管理のIcebergテーブル用としてのみサポートされます。
外部クエリエンジンを使用してIcebergテーブルにアクセスするワークフロー¶
外部クエリエンジンを使用してIcebergテーブルにアクセスするには、以下のステップを完了します。
ステップ1:Icebergテーブルの作成¶
重要
アクセスするSnowflake管理のIcebergテーブルがすでにある場合は、このステップをスキップできます。
このステップでは、Snowflakeをカタログとして使用するSnowflake管理のIcebergテーブルを作成し、外部クエリエンジンでアクセスできるようにします。手順については、以下のトピックをご参照ください。
チュートリアル: 初めてのApache Iceberg™テーブルを作成する:データベースを作成し、Snowflake管理のIcebergテーブルを作成し、テーブルにデータをロードする方法を示すチュートリアル。
Snowflake管理のIcebergテーブルを作成する:Snowflake管理のIcebergテーブルを作成するコード例。
ステップ2:アクセス制御の構成¶
重要
アクセスするIcebergテーブルへのアクセスで構成されたロールがすでにある場合は、このステップをスキップできます。
このステップでは、外部クエリエンジンでアクセスするSnowflake管理のIcebergテーブルのアクセス制御を構成します。たとえば、Snowflakeでは次のロールを設定できます:
data_engineerロール。データベース内のすべてのスキーマとSnowflake管理のすべてのIcebergテーブルにアクセスできます。
data_analyst role ロール。データベース内の1つのスキーマにアクセスし、そのスキーマ内の2つのSnowflake管理のIcebergテーブルにのみアクセスできます。
詳細は以下のセクションをご覧ください。
Icebergテーブルへの読み取りアクセスを構成する¶
Icebergテーブルにクエリを実行するには、操作を実行するために使用されるロールに、Icebergテーブルに対するSELECT権限、および親データベースとスキーマに対するUSAGE権限が必要です。これらの権限をロールに付与する例については、:ref:`label-tables_iceberg_query_using_external_query_engine_snowflake_horizon_set_up_service_account_user`を参照してください。
重要
Icebergテーブルに対するOWNERSHIP権限を持つロールは、テーブルに関連付けられた外部ボリュームに対するUSAGE権限を維持する必要があります。所有者ロールに外部ボリュームでのUSAGEがない場合、ベンディングされた認証情報を必要とする読み取りまたは書き込みテーブル操作はすべて失敗します。
例:サービスアカウントユーザーの設定¶
次の例では、Icebergテーブルへの読み取り専用アクセスを持つSnowflakeのサービスアカウントユーザーを設定します。
(オプション)IcebergテーブルにFUTURE GRANTを適用する¶
スキーマで作成された新しいIcebergテーブルへのアクセスを保証するには、:ref:`GRANT … ON FUTURE ICEBERG TABLES <label-grant_privilege_schema_future_grants>`構文を使用します。
次の例では、``my_schema``という名前のスキーマで作成されたIcebergテーブルへのアクセス権を``data_engineer``ロールに付与します。
Snowflakeでのアクセス制御について詳しくは、次のトピックを参照してください。
Icebergテーブルへの書き込みアクセスを構成する¶
次のテーブルは、Icebergテーブルへの書き込み操作に必要な権限について説明しています。
操作 |
必要な権限 |
|---|---|
データ操作言語(DML)操作 |
重要 操作の実行に使用されるロールには、次の権限の*すべて*が必要です。
|
CREATE ICEBERG TABLE |
操作の実行に使用されるロールには、次の権限が必要です。
|
CREATE SCHEMA |
操作の実行に使用されるロールには、親データベースに対するCREATE SCHEMA権限が必要です。 |
テーブル名の変更 |
操作の実行に使用されるロールには、テーブルに対するOWNERSHIP権限が必要です。 重要 テーブルを新しいスキーマに移動するには、ロールが宛先スキーマに対するCREATE ICEBERG TABLE権限も持っていることを確認してください。 |
テーブルに対する他のすべての操作 |
操作の実行に使用されるロールには、スキーマとデータベースに対する権限に加えて、テーブルに対するOWNERSHIP権限が必要です。たとえば、ALTER ICEBERG TABLE … ADD COLUMNまたはALTER ICEBERG TABLE … DROP COLUMN操作を実行するにはこれらの権限が必要です。 |
Snowflakeでのアクセス制御について詳しくは、次のトピックを参照してください。
ステップ3:認証用アクセストークンの取得¶
このステップでは、SnowflakeアカウントのHorizonカタログエンドポイントを認証するために必要なアクセストークンを取得します。各ユーザー(サービスまたは人間)用のアクセストークンと、Snowflake管理のIcebergテーブルへのアクセスで構成されたロールを取得する必要があります。たとえば、DATA_ENGINEER ロールを持つユーザーと DATA_ANALYST ロールを持つ別のユーザーに対して、1つのアクセストークンを取得する必要があります。
Horizon Catalogを介して外部クエリエンジンをIcebergテーブルに接続する ときに、このアクセストークンを指定します。
次の認証オプションのいずれかを使用して、アクセストークンを取得できます。
外部 OAuth¶
外部 OAuth を使用している場合は、IDプロバイダーのアクセストークンを生成します。手順については、 外部 OAuth の概要 をご参照ください。
注釈
外部 OAuth の場合は、アクセストークンを指定する代わりに、自動トークン更新を使用してエンジンへの接続を構成することもできます。
キーペア認証¶
キーペア認証を使用してアクセストークンを取得する場合は、プライベートキーで JSON ウェブトークン(JWT)に署名します。
次のステップでは、キーペア認証用のアクセストークンを生成する方法を説明します。
ステップ1:キーペア認証を構成する¶
このステップでは、次のタスクを実行します。
秘密キーを生成する
公開キーを生成する
秘密キーと公開キーを安全に保管する
Snowflakeユーザーに公開キーを割り当てる権限を付与します。
Snowflakeユーザーに公開キーを割り当てる
ユーザーの公開キーのフィンガープリントを検証する
手順については、 キーペア認証の構成 をご参照ください。
ステップ2:ユーザーにロールを付与する¶
アクセスするテーブルに対する権限を持つSnowflakeロールをキーペア認証ユーザーに付与するには、/sql-reference/sql/grant-role`コマンドを実行します。たとえば、 ``my_service_user` ユーザーに ENGINEER ロールを付与するには、次のコマンドを実行します。
ステップ3:JSON ウェブトークン( JWT )を生成する¶
このステップでは、 SnowSQL を使用してキーペア認証用の JSON ウェブトークン( JWT )を生成します。
注釈
使用中のマシンに `SnowSQL<https://www.snowflake.com/developers/downloads/snowsql/>`_ がインストールされている必要があります。
あるいは、Python、Snowflake CLI 、Java、またはNode.jsを使用して JWT を生成することもできます。例については、次のセクションをご参照ください。
SnowSQL を使用して JWT を生成する:
条件:
<private_key_file>is the path to your private key file that corresponds to the public key assigned to your Snowflake user.For example:/Users/jsmith/.ssh/rsa_key.p8.<account_identifier>``はSnowflakeアカウントのアカウント識別子であり、形式は``<organization_name>-<account_name>``です。アカウント識別子を見つけるには、 :ref:`label-tables_iceberg_query_using_external_query_engine_snowflake_horizon_before_you_begin` をご参照ください。アカウント識別子の例: ``myorg-myaccount<account_locator>は、Snowflakeアカウントのアカウントロケーターです。アカウントロケーターを見つけるには、 SnowsightでSnowflakeアカウント情報を見つける を参照し、 Account Details ダイアログで Account locator を確認します。
<user_name>は、ユーザーに公開キーが割り当てられたSnowflakeユーザーのユーザー名です。
ステップ4:アクセストークンを生成する¶
重要
アクセストークンを生成するには、まず JWT を生成する 必要があります。まず JWT を生成する必要があるのは、アクセストークンを生成するのに JWT を使用するためです。
curl コマンドを使用してアクセストークンを生成します。
条件:
<account_identifier>``はSnowflakeアカウントのアカウント識別子であり、形式は``<organization_name>-<account_name>``です。アカウント識別子を見つけるには、 :ref:`label-tables_iceberg_query_using_external_query_engine_snowflake_horizon_before_you_begin` をご参照ください。アカウント識別子の例: ``myorg-myaccount``<role>``は、ENGINEERなど、Icebergテーブルへのアクセスを付与されたSnowflakeロールです。
<JWT_token>は、前のステップで生成した JWT です。
プログラムアクセストークン(PAT)¶
PATs を使用する場合は、認証用の PAT を生成します。
まず、 Icebergテーブルに外部クエリエンジンを接続する ために使用する PAT を生成します。次に、アクセストークンを生成します。これは、 PAT の権限を確認するためにのみ使用します。
ステップ1:PAT を生成する¶
PAT の構成および生成方法の手順については、 認証のためのプログラム アクセス トークンの使用 をご参照ください。
次の例では、 ALTER USER ... ADD PROGRAMMATIC ACCESS TOKEN (PAT) コマンドを使用して、前のステップで作成したサービスアカウントユーザー用のプログラムアクセストークン( PAT )を作成します。
ステップ2:PATのアクセストークンを生成する¶
このステップでは、 PAT のアクセストークンを生成します。
注意
PAT の 権限を確認する 場合にのみ、このステップで生成するアクセストークンを指定します。Icebergテーブルに外部クエリエンジンを接続する 場合は、このステップで生成するアクセストークンではなく、前のステップで生成した PAT を指定する必要があります。
curl コマンドを使用して、 PAT のアクセストークンを生成します。
条件:
<account_identifier>``はSnowflakeアカウントのアカウント識別子であり、形式は``<organization_name>-<account_name>``です。アカウント識別子を見つけるには、 :ref:`label-tables_iceberg_query_using_external_query_engine_snowflake_horizon_before_you_begin` をご参照ください。アカウント識別子の例: ``myorg-myaccount``<role>``はPATに付与されるSnowflakeロールであり、ENGINEERなど、クエリまたは書き込みを行うIcebergテーブルへのアクセス権を持っています。
<PAT_token>は、前のステップで生成した PAT トークンの値です。
ステップ4:アクセストークンの権限を確認する¶
このステップでは、前のステップで取得したアクセストークンの権限を確認します。
Horizon IRC エンドポイントへのアクセスを確認する¶
curl コマンドを使用して、Horizon IRC エンドポイントへのアクセス権限があることを確認します。
条件:
<account_identifier>``はSnowflakeアカウントのアカウント識別子であり、形式は``<organization_name>-<account_name>``です。アカウント識別子を見つけるには、 :ref:`label-tables_iceberg_query_using_external_query_engine_snowflake_horizon_before_you_begin` をご参照ください。アカウント識別子の例: ``myorg-myaccount``<access_token>``は、生成したアクセストークンです。PAT を使用している場合、この値は 生成したアクセストークン であり、生成した 個人用アクセストークン( PAT ) ではありません。
``<database_name>``は、アクセスするIcebergテーブルを含むデータベースの名前です。
重要
データベースが名前を引用符で囲まずに作成された場合は、小文字で作成されたとしても、データベース名を*すべて大文字*で指定する必要があります。
戻り値の例:
テーブルのメタデータを取得する¶
GET リクエストを作成してテーブルのメタデータを取得することもできます。Snowflakeは loadTable 操作を使用して、 REST カタログからテーブルメタデータをロードします。
条件:
<account_identifier>``はSnowflakeアカウントのアカウント識別子であり、形式は``<organization_name>-<account_name>``です。アカウント識別子を見つけるには、 :ref:`label-tables_iceberg_query_using_external_query_engine_snowflake_horizon_before_you_begin` をご参照ください。アカウント識別子の例: ``myorg-myaccount<database_name>は、取得するメタデータのテーブルのデータベースです。<namespace_name>は、取得するメタデータのテーブルの名前空間です。<table_name>は、取得するメタデータのテーブルです。``<access_token>``は、生成したアクセストークンです。PAT を使用している場合、この値は 生成したアクセストークン であり、生成した 個人用アクセストークン( PAT ) ではありません。
重要
データベース、名前空間、またはテーブルが名前を引用符で囲まずに作成された場合は、オブジェクトが小文字で作成されたとしても、データベース、名前空間、またはテーブル名を*すべて大文字*で指定する必要があります。
(任意)ステップ5:データ保護ポリシーを構成する¶
このステップでは、Icebergテーブルのデータ保護ポリシーを構成します。Snowflakeデータポリシーで保護する必要があるテーブルがない場合は、次のステップに進むことができます。
注釈
データ保護ポリシーで保護されたテーブルは、Horizon Iceberg RESTAPI 経由およびApache Spark™を使用してアクセスできます。
データ保護ポリシーの構成方法については、 Horizon Iceberg RESTAPI 経由およびApache Spark™を使用してアクセスされるIcebergテーブルのデータ保護ポリシーを構成する をご参照ください。
ステップ6:Horizonカタログを介する外部クエリエンジンとIcebergテーブルの接続¶
このステップでは、Horizonカタログを介して外部クエリエンジンをIcebergテーブルに接続します。この接続により、外部クエリエンジンを使用してテーブルにアクセスできます。
外部エンジンはSnowflakeによって公開される Apache Iceberg™ REST エンドポイントを使用します。Snowflakeアカウントの場合、このエンドポイントは次の形式をとります。
このステップのコード例は、Sparkで接続を設定する方法を示しています。コード例は PySpark です。詳細は以下のセクションをご覧ください。
外部 OAuth またはキーペア認証を使用した接続¶
次の構成のいずれかを使用して接続します。
Snowflakeデータ保護ポリシーが構成されて いない Icebergテーブルにアクセスする場合、 データポリシーを適用せずに外部クエリエンジンを接続する
Snowflakeの行アクセスとマスキングポリシーが構成されているIcebergテーブルにアクセスする場合、 データポリシーが適用された外部クエリエンジンを接続する
データポリシーを適用せずに外部クエリエンジンを接続する¶
外部OAuthまたはキーペア認証を使用して、外部クエリエンジンをIcebergテーブルに接続する。次のサンプルコードを使用します。
このコードはデータ保護ポリシーを適用しません。
条件:
<account_identifier>`は、アクセスするIcebergテーブルを含むSnowflakeアカウントのSnowflakeアカウント識別子です。この識別子を見つけるには、 :ref:`label-tables_iceberg_query_using_external_query_engine_snowflake_horizon_before_you_beginをご参照ください。<your_access_token>は、取得したアクセストークンです。取得するには、 ステップ3:認証用アクセストークンの取得 をご参照ください。注釈
外部 OAuth の場合は、アクセストークンを指定する代わりに、自動トークン更新を使用してエンジンへの接続を構成することもできます。
:code:`<database_name>`は、アクセスするSnowflake管理のIcebergテーブルを含むSnowflakeアカウントのデータベースの名前です。
注釈
Sparkの
.warehouseプロパティは、Snowflakeウェアハウス名ではなく、Snowflake データベース 名を想定しています。:code:`<role>`は、アクセスするIcebergテーブルへのアクセスで構成されたSnowflakeのロールです。例: DATA_ENGINEER。
重要
デフォルトでは、コード例はAmazon S3に保存された Apache Iceberg™ テーブル用に設定されています。IcebergテーブルがAzure Storage(ADLS)に保存されている場合は、次のステップを実行します:
次の行をコメントアウトします:
f"org.apache.iceberg:iceberg-aws-bundle:{ICEBERG_VERSION}"次の行のコメントを解除します:
# f"org.apache.iceberg:iceberg-azure-bundle:{ICEBERG_VERSION}"
データポリシーが適用された外部クエリエンジンを接続する¶
適用されたデータ保護ポリシーで接続するには、 SparkをIcebergテーブルに接続する をご参照ください。
プログラムのアクセストークン(PAT)を使用した接続¶
次の構成のいずれかを使用して接続します。
アクセスするIcebergテーブルでデータ保護ポリシーを*使用しない*場合は、:ref:`label-tables_iceberg_query_using_external_query_engine_snowflake_horizon_connect_pat_token_no_access_policies`構成を使用します。
アクセスするIcebergテーブルでデータ保護ポリシーを*使用する*場合は、:ref:`label-tables_iceberg_query_using_external_query_engine_snowflake_horizon_connect_pat_token_access_policies`構成を使用します。
データポリシーを適用せずに外部クエリエンジンを接続する¶
次のコード例を使用し、プログラムのアクセストークン(PAT)を使用して外部クエリエンジンをIcebergテーブルに接続します:
このコードはデータ保護ポリシーを適用しません。
条件:
<account_identifier>`は、アクセスするIcebergテーブルを含むSnowflakeアカウントのSnowflakeアカウント識別子です。この識別子を見つけるには、 :ref:`label-tables_iceberg_query_using_external_query_engine_snowflake_horizon_before_you_beginをご参照ください。<your_PAT_token>は取得した PAT です。取得するには、 ステップ3:認証用アクセストークンの取得 をご参照ください。:code:`<role>`は、アクセスするIcebergテーブルへのアクセスで構成されたSnowflakeのロールです。例: DATA_ENGINEER。
:code:`<database_name>`は、アクセスするSnowflake管理のIcebergテーブルを含むSnowflakeアカウントのデータベースの名前です。
注釈
Sparkの
.warehouseプロパティは、Snowflakeウェアハウス名ではなく、Snowflake データベース 名を想定しています。
重要
デフォルトでは、コード例はAmazon S3に保存された Apache Iceberg™ テーブル用に設定されています。IcebergテーブルがAzure Storage(ADLS)に保存されている場合は、次のステップを実行します:
次の行をコメントアウトします:
f"org.apache.iceberg:iceberg-aws-bundle:{ICEBERG_VERSION}"次の行のコメントを解除します:
# f"org.apache.iceberg:iceberg-azure-bundle:{ICEBERG_VERSION}"
データポリシーが適用された外部クエリエンジンを接続する¶
適用されたデータ保護ポリシーで接続するには、 SparkをIcebergテーブルに接続する をご参照ください。
ステップ7:Icebergテーブルへのアクセス¶
このセクションでは、Apache Spark™を使用してIcebergテーブルにクエリを実行し、Icebergテーブルに書き込むためのコード例を示します。
Icebergテーブルのクエリ¶
このセクションでは、Apache Spark™を使用してIcebergテーブルにクエリを実行するための次のコード例を示します。
名前空間を表示する
名前空間を使用する
Show tables
テーブルをクエリする
名前空間を表示する¶
Use namespace¶
Show tables¶
テーブルをクエリする¶
Icebergテーブルへの書き込み¶
このセクションでは、Apache Spark™を使用してIcebergテーブルに書き込むための次のコード例を示します。
CREATE TABLE
INSERT INTO <table>
ALTER TABLE ... ADD COLUMN
UPDATE TABLE ... WHERE
DELETE TABLE ... WHERE
TRUNCATE TABLE
RENAME TABLE
DROP TABLE
CREATE TABLE¶
INSERT INTO <table>¶
ALTER TABLE ... ADD COLUMN¶
UPDATE TABLE ... WHERE¶
DELETE TABLE ... WHERE¶
TRUNCATE TABLE¶
RENAME TABLE¶
DROP TABLE¶
外部クエリエンジンを使用してIcebergテーブルにアクセスする際の考慮事項¶
このセクションでは、外部クエリエンジンを使用してIcebergテーブルにアクセス、クエリ実行、および書き込みを行う際の考慮事項を示します。
外部クエリエンジンでIcebergテーブルにアクセスする場合は、以下の項目を考慮してください。
Iceberg
Snowflakeのテーブルの場合:
Snowflake管理Icebergテーブルのみがサポートされています。
リスト:
リスト作成の自動フルフィルメント を介して共有するIcebergテーブルは、コンシューマーアカウントのHorizon Iceberg REST カタログ API からアクセスできません
ネットワークおよびプライベート接続:
ユーザーレベルで設定されたネットワークポリシーの使用は、この機能ではサポートされていません。
Snowflakeが管理するネットワークルール の場合、静的であるエグレス IP アドレスはサポートされていません。
Horizonカタログエンドポイントのアクセス権をご利用のストレージアカウントに明示的に付与することは、サポートされていません。外部エンジンからHorizonカタログへ、およびHorizonカタログからストレージアカウントへの安全な接続のために、プライベート接続を使用することをお勧めします。
クラウド:
商用:この機能は、すべての商用クラウドリージョンで、Amazon S3、Google Cloud、またはMicrosoft Azureに保存されているSnowflake管理のIcebergテーブルでのみサポートされています。S3互換の非 AWS ストレージはまだサポートされていません。
FedRAMP(Moderate):この機能は、us-east-1およびus-west-2リージョンのAWS Commercial Gov(US)におけるFedRAMP(Moderate)デプロイメントに保存されているSnowflake管理のIcebergテーブルでサポートされています。
Amazon S3に保存されているIcebergテーブルの場合:
SSE-KMS 暗号化を使用する場合は、アクセスを有効にする際のサポートについて、カスタマーサポートまたはアカウントチームにお問い合わせください。
注釈
KMSで暗号化された外部ボリュームへの書き込みはサポートされていません。
Azureに保存されているIcebergテーブルの場合:
Azure仮想ネットワーク(VNet)はサポートされていません。
認証:
キーペア認証について、キーペアのローテーションはサポートされていません。
ワークロードIDフェデレーションは、この機能ではサポートされていません。
外部クエリエンジンでIcebergテーブルをクエリ(読み取り)する場合は、以下の項目を考慮してください。
Iceberg
以下のテーブルのクエリはサポートされていません。
リモートテーブル
Snowflakeネイティブテーブル
デルタベースのIcebergテーブルや、Iceberg互換のParquetデータファイルから COPYINTO テーブルコマンドを使用してデータをロードしたSnowflake管理のIcebergテーブルを含む、外部管理Icebergテーブル。
Iceberg v2テーブルの読み取りはサポートされています。
Iceberg V3テーブルの読み取り(公開プレビュー)は、以下の機能でサポートされています。
Variantデータ型
行系統
デフォルト値やgeographyデータ型など、他のすべてのIceberg V3機能はサポートされていません。
アクセス制御:
以下に示す詳細なデータポリシーで保護されたテーブルには、Snowflake Horizonカタログを通じてApache Spark™を介してアクセスできます。
マスキングポリシー
タグベースのマスキングポリシー
行アクセスポリシー
詳細については、 Apache Spark™から Apache Iceberg™ テーブルをクエリするときにデータ保護ポリシーを適用する をご参照ください。
クローンおよび変換されたテーブル:
クローンまたは変換されたテーブルの読み取りは、提供された認証情報ではサポートされていません。これらのテーブルを読み取るには、オブジェクトストレージへの直接アクセスを使用します。
外部クエリエンジンでIcebergテーブルに書き込む場合は、以下の項目を考慮してください。
テーブル操作:
CREATE TABLEステートメントでベースロケーションを指定することはできません。
ベースロケーションを指定せずにSnowflake管理テーブルを作成すると、Snowflakeはテーブルに対して以下のパスを構築します。
STORAGE_BASE_URL/database/schema/table_name.randomId/[data | metadata]/外部エンジンからのCREATE TABLE AS SELECT(CTAS)はサポートされていません。
等価削除はサポートされていません。
行レベルの削除を使用してテーブルに書き込むことはできません。コピーオンライトモードのみがサポートされています。
Icebergタグとブランチの作成はサポートされていません。
外部エンジンの書き込みはIcebergバージョン2でのみサポートされています。Icebergバージョン3(v3)テーブル(公開プレビュー)への書き込みは現在サポートされていません。
KMSで暗号化された外部ボリュームへの書き込みはサポートされていません。
Snowflakeのダイナミックテーブルへの書き込みはサポートされていません。
共有Icebergテーブルへの書き込みはサポートされていません。
Icebergテーブルの登録はサポートされていません。
メンテナンス操作
テーブルを以前のスナップショットにロールバックすることはできません。
スナップショットの有効期限切れ操作はサポートされていません。
Icebergテーブルをv2からv3にアップグレードすることはできません。
クローンおよび変換されたテーブル:
クローンまたは変換されたテーブルへの書き込みは、提供された認証情報ではサポートされていません。これらのテーブルに書き込むには、テーブルが格納されているオブジェクトストレージに外部クエリエンジンを直接接続します。
外部管理からSnowflake管理に変換されたIcebergテーブルには書き込みできません。
ストリーム:
Iceberg V2テーブルにおいて、コピーオンライト操作が行われると、標準ストリームは更新または再配置された行を、DELETEレコードとその後に続く同じ行のINSERTレコードとして表します。
きめ細かいアクセス制御ポリシー:
きめ細かいアクセス制御ポリシーやタグを持つテーブルへの書き込みはサポートされていません。