|iceberg-tm|テーブルのSnowflakeストレージ¶
Snowflakeは、|iceberg-tm|テーブルのSnowflakeストレージをサポートしています。
標準のSnowflakeテーブルと同様に、この機能によりSnowflakeで:ref:`Snowflakeが管理するIcebergテーブル<label-tables_iceberg_snowflake_as_catalog>`を作成できます。このオプションを使用すると、SnowflakeはSnowflake(内部)ストレージを使用してIcebergテーブルファイルを保存および管理するため、ユーザーが外部クラウドストレージへのアクセスを設定する必要はありません。
この機能は:doc:Snowflake Horizonカタログ</user-guide/snowflake-horizon>`と連携するため、外部クエリエンジンを使用して、Snowflakeストレージを使用するIcebergテーブルに接続することができます。詳細については、 :doc:/user-guide/tables-iceberg-access-using-external-query-engine-snowflake-horizon` をご参照ください。さらに、Snowflakeではこれらの同じテーブルをクエリできます。
注釈
この機能は現在、Amazon Web Services(AWS)またはAzureでホストされているアカウントでのみ使用できます。この機能は、政府リージョンまたは中華人民共和国ではご利用いただけません。
Snowflakeストレージの仕組み¶
SnowflakeストレージでIcebergテーブルを作成すると、Snowflakeはすべてのデータとメタデータファイルを内部で管理します。外部ボリュームを構成したり、クラウドストレージへのアクセス権をSnowflakeに付与したりする必要はありません。
SnowflakeストレージでIcebergテーブルを作成する¶
Snowflakeが管理するストレージを使用した明示的:code:`TRANSIENT`テーブル:
:code:`SNOWFLAKE_MANAGED`外部ボリューム¶
:code:`EXTERNAL_VOLUME = 'SNOWFLAKE_MANAGED'`はSnowflakeに用意されているテーブル用のストレージを選択します。:code:`SNOWFLAKE_MANAGED`は予約済みの値であり、ユーザーが作成した:doc:`外部ボリューム</sql-reference/sql/create-external-volume>`オブジェクトではありません。このパスに対して:code:`CREATE EXTERNAL VOLUME`は実行しません。
代わりに**ご使用の**クラウドストレージにファイルを保存するIcebergテーブルに対して、外部ボリュームを作成し、USAGE`を付与して、:code:`EXTERNAL_VOLUME`をそのボリュームの名前に設定します。手順については、 :doc:/user-guide/tables-iceberg-configure-external-volume` をご参照ください。
永続テーブルおよび一時テーブル¶
Snowflakeストレージを使用するIcebergテーブルは、永続テーブルまたは一時テーブルのいずれかとして設定できます。
**永続的**(デフォルト):テーブルデータは、標準テーブルに対してSnowflakeに用意されているのと同じ7日間のデータ復旧機能である:doc:`Fail-safe</user-guide/data-failsafe>`によって保護されます。
一時的:テーブルデータはFail-safeで保護されません。ストレージとTime Travelの動作は、Snowflakeの:ref:`一時テーブル<label-table_type_transient>`に記載されているとおりです。一時テーブルにはFail-safeストレージコストは発生しません。
:doc:`CREATE ICEBERG TABLE </sql-reference/sql/create-iceberg-table-snowflake>`ステートメントの:code:`TRANSIENT`キーワードを使用して、一時的なIcebergテーブルを作成します。
注釈
一時的なIcebergテーブルはSnowflakeストレージでのみサポートされます。お客様管理の外部ボリュームを使用する一時的なIcebergテーブルを作成することはできません。
Tip
既存のIcebergテーブルが永続テーブルであるか一時テーブルであるかを確認するには、:doc:`SHOW TABLES </sql-reference/sql/show-tables>`を実行して``kind``列を確認します。値は一時テーブルの場合は``TRANSIENT``であり、永続テーブルの場合は``TABLE``です。
デフォルトカタログと外部ボリューム¶
ステートメントで:code:CATALOG`および:code:`EXTERNAL_VOLUME`を省略した場合、Snowflakeはスキーマ、データベース、およびアカウントのデフォルトからそれらを解決します(スキーマはデータベースをオーバーライドし、データベースはアカウントをオーバーライドします)。有効なカタログがSnowflakeである(:code:`CATALOG = 'SNOWFLAKE')場合、下位レベルで別のデフォルトが設定されていない限り、デフォルトの外部ボリュームは:code:SNOWFLAKE_MANAGED`です。 パラメーターで指定。詳細については、 :ref:`label-tables_iceberg_configure_catalog_set_level および アカウント、データベース、またはスキーマレベルでデフォルトの外部ボリュームを設定する をご参照ください。
:code:`CATALOG = 'SNOWFLAKE'`を明示的に設定した場合、:code:`EXTERNAL_VOLUME`または別のボリュームを指定するスキーマ、データベース、またはアカウントのデフォルトでオーバーライドしない限り、デフォルトの外部ボリュームは:code:`SNOWFLAKE_MANAGED`です。
複製¶
フェールオーバーまたは複製グループを使用することで、Snowflakeストレージを使用するIcebergテーブルを複製できます。これらのテーブルの複製を有効にするには、まず:doc:`/user-guide/tables-iceberg-replication`のステップに従って、Snowflakeが管理するIcebergテーブルの複製を有効にする必要があります。
Snowflakeが管理する標準的なIcebergテーブルとは異なり、フェールオーバーグループまたは複製グループの:code:`OBJECT_TYPES`リストに:code:`EXTERNAL VOLUMES`を配置する必要はありません。Snowflakeは、:code:`SNOWFLAKE_MANAGED`外部ボリュームを使用する複製されたテーブルのストレージを自動的に管理します。
たとえば、Snowflakeストレージを使用するIcebergテーブルが含まれるデータベースを複製するフェールオーバーグループを作成します。
複製に関する考慮事項¶
Google Cloud Platform(GCP)でホストされているアカウントへの複製はサポートされていません。ターゲットアカウントがGCPでホストされている場合、Snowflakeはリフレッシュ操作中にSnowflakeストレージを使用するIcebergテーブルをスキップします
プライベートプレビュー中にユーザーが:code:`SNOWFLAKE_MANAGED`以外の外部ボリュームを使用してIcebergテーブルを作成した場合、Snowflakeはセカンダリアカウントの複製されたテーブルを自動的に移行して、:code:`SNOWFLAKE_MANAGED`ボリュームを使用します。この移行については、次の点に注意してください。
フェールオーバーグループまたは複製グループの:code:`OBJECT_TYPES`リストに:code:`EXTERNAL VOLUMES`を配置すると、プライベートプレビューの外部ボリュームはセカンダリアカウントに複製されますが、テーブルにはアタッチされません。セカンダリアカウントのプライベートプレビュー外部ボリュームのすべての使用はブロックされます。
Snowflakeは、複製を有効にする前にプライベートプレビュー外部ボリュームを使用するIcebergテーブルをドロップし、:code:`EXTERNAL_VOLUME = SNOWFLAKE_MANAGED`を使用して再作成することを推奨します。
請求¶
Snowflakeはお客様のアカウントに次の使用量を請求します。
ストレージコスト¶
Snowflakeは、Snowflakeに保存されたバイトごとに課金します。
Snowflakeは、Iceberg以外のテーブルのストレージ使用量と合わせて、:doc:`/sql-reference/account-usage/storage_usage`の:code:`STORAGE_BYTES`列でSnowflakeストレージを使用するIcebergテーブルのストレージ使用量を集計します。カタログにコミットされたファイルのみが:code:`STORAGE_BYTES`に含まれます。Snowflakeは、中止されたコミットに対しては課金しません。
このストレージ使用量に対して発生するコストについては、Snowflakeウェブサイトにある`Snowflakeサービス利用表<https://www.snowflake.com/legal-files/CreditConsumptionTable.pdf>`_のテーブル3(a)で説明されています。
リクエストコスト¶
注釈
Horizonカタログを介してクエリエンジンを使用しSnowflakeに格納されているIcebergテーブルにアクセスすると、クエリエンジンは外部クエリエンジンとみなされます。外部クエリエンジンを使用してこれらのテーブルにアクセスすると、Snowflakeはこのアクセスの料金をアカウントに請求します。
次のリストでは、外部クエリエンジンがSnowflakeに格納されているIcebergテーブルにアクセスするいくつかのケースについて説明しています。
別のSnowflakeアカウントからHorizonカタログを通じてテーブルにアクセスするSnowflakeエンジン。たとえば、テーブルがSnowflakeアカウントAによって管理されているものの、ユーザーがアカウントBのSnowflakeエンジンからHorizonカタログを通じてテーブルにアクセスした場合は、このアクセスに対して課金されます。アカウントBのSnowflakeエンジンは外部クエリエンジンであるため、このアクセスに対して課金されます。
Snowflake Container Servicesを使用してSnowflakeネットワーク内にデプロイされる、サードパーティのクエリエンジン。Horizonカタログを通じてこれらのエンジンを使用しテーブルにアクセスすると、エンジンは外部エンジンであり、リクエストに対して他のサードパーティのクエリエンジンと同じ方法で課金されます。
Horizon Catalogを介してテーブルに接続するために使用する、Snowflakeの外部でデプロイするサードパーティのクエリエンジン。
Snowflakeクエリエンジンを使用してこれらのIcebergテーブルに*直接*アクセスした場合、つまりHorizonカタログを通じてアクセスしなかった場合は、Snowflakeによってアカウントに課金されません。たとえば、テーブルがアカウントAによって管理されており、アカウントAのSnowflakeエンジンを使用してテーブルにアクセスした場合、このアクセスに対する料金は請求されません。
Snowflake Horizonカタログを通じて外部クエリエンジンを使用して、Snowflakeストレージを使用するIcebergテーブルにアクセスすると、基盤となるストレージシステムに送信した各HTTPリクエストに対する料金がSnowflakeによってアカウントに課金されます。レートはリクエストタイプによって異なります。
「クラス1」として請求されるPUT、COPY、POST、PATCHおよびLISTの各操作。
「クラス2」として請求されるGETおよびSELECTの各操作。
これらの操作タイプのリクエスト数を表示するには、STORAGE_REQUEST_HISTORY </sql-reference/account-usage/storage_request_history>`アカウント使用状況ビューを使用します。この使用量は、請求レポートに記載されている``STORAGE_REQUEST-1``および``STORAGE_REQUEST-2` SKUsに基づいて課金されます。
このレートについては、`Snowflakeサービス利用表<https://www.snowflake.com/legal-files/CreditConsumptionTable.pdf>`_のテーブル3(g)で説明されています。
データ転送コスト¶
Horizonカタログを通じて外部クエリエンジンを使用して、別のリージョンから、または別のクラウドプロバイダーを利用してテーブルにアクセスすると、標準のデータ転送料金がバイト単位で課金されます。
このデータ転送料金については、`Snowflakeサービス利用表<https://www.snowflake.com/legal-files/CreditConsumptionTable.pdf>`_のテーブル4(a)、4(b)、および4(c)で説明されています。
詳細については、 データ転送のコストについて をご参照ください。
プライベート接続¶
外部クエリエンジンを使用してSnowflakeストレージを使用するIcebergテーブルにアクセスする場合は、トラフィックがパブリックインターネットを通過しないようにプライベート接続を構成することができます。
セットアップ手順については、 Snowflake管理ストレージボリュームへ をご参照ください。
考慮事項と制約¶
Snowflakeストレージを使用するIcebergテーブルを操作する場合は、以下の点を考慮してください。
クラウドプロバイダーのサポート¶
この機能は現在、Amazon Web Services(AWS)またはMicrosoft Azureでホストされているアカウントでのみご利用いただけます。この機能は、政府リージョンまたは中華人民共和国ではご利用いただけません。
暗号化¶
Snowflakeストレージを使用するIcebergテーブルは、サーバー側の暗号化(SSE)のみをサポートします。顧客管理キー(CMK)は、アカウントで:doc:`Tri-Secret Secure</user-guide/security-encryption-tss>`が有効になっている場合でもサポートされません。
クローニング動作¶
警告
作成するIcebergテーブルはカタログで指定された認証情報を使用します。カタログで指定された認証情報を使用するIcebergテーブルのクローンを作成すると、クローン作成されたテーブルはソーステーブルと同じベースロケーションを共有します。同じ認証情報を使用して共有ベースロケーションにアクセスできるため、クローン作成されたテーブルにはソーステーブルへの書き込みアクセス権が付与されます。
Snowflakeが管理するストレージを使用するテーブル(EXTERNAL_VOLUME = 'SNOWFLAKE_MANAGED')の場合、:code:`CREATE ICEBERG TABLE ... CLONE`は、ソーステーブルと新しいテーブルの**両方**が一時テーブルである、または**両方*が永続テーブルである場合にのみ成功します。一方が一時テーブルであり、もう一方が永続テーブルである場合、ステートメントは失敗します。
ソーステーブル |
クローン |
結果 |
|---|---|---|
一時的 |
一時的 |
サポート対象 |
永続 |
永続 |
サポート対象 |
一時的 |
永続 |
サポート対象外 |
永続 |
一時的 |
サポート対象外 |
コマンドの構文と、その他のクローニング動作については、:doc:`/sql-reference/sql/create-iceberg-table-snowflake`の:ref:`label-create_iceberg_table_clone_syntax`および:ref:`label-cloning_and_iceberg_tables`をご参照ください。
データの取り込み¶
以下の方法で、Snowflakeストレージを使用するIcebergテーブルにデータを取り込むことができます。
Snowpipe::doc:`Snowpipe</user-guide/data-load-snowpipe-intro>`を使用して、:doc:`COPY INTO </sql-reference/sql/copy-into-table>`を使用するクラウドストレージのファイルからデータをロードします。SnowpipeはIcebergの永続テーブルと一時テーブルの両方で動作します。
Snowpipe Streaming::doc:`Snowpipe Streamingハイパフォーマンス</user-guide/snowpipe-streaming/snowpipe-streaming-high-performance-overview>`を使用して、ストリーミングデータを取り込みます。Snowpipe StreamingはIcebergの永続テーブルと一時テーブルの両方で動作します。