Icebergテーブル

Icebergテーブルは Apache Iceberg オープンテーブルフォーマット仕様を使用します。これはオープンフォーマットで保存されたデータファイルの抽象化レイヤーを提供し、以下のような機能をサポートします。

  • ACID(原子性、一貫性、分離性、耐久性)トランザクション

  • スキーマの進化

  • 隠しパーティション

  • テーブルスナップショット

SnowflakeのIcebergテーブルは、通常のSnowflakeテーブルのパフォーマンスとクエリセマンティクスを、管理する外部クラウドストレージと組み合わせます。Snowflakeに保存できない、または保存しないことを選択した既存のデータレイクに最適です。

Snowflakeは Apache Parquet ファイル形式を使用するIcebergテーブルをサポートしています。

はじめるにあたり

Icebergテーブルを作成するには、最初に 外部ボリュームを構成 します。SnowflakeでのIcebergテーブルの使用方法については、 クイックスタート: Icebergテーブルを使いはじめるにあたり を参照してください。

Icebergテーブルの仕組み

このセクションでは、 Snowflakeで Icebergテーブルを操作するための情報を提供します。Icebergテーブルフォーマット仕様の詳細については、公式の Apache IcebergドキュメントIcebergテーブル仕様 をご参照ください。

データストレージ

Icebergテーブルはデータとメタデータファイルを外部クラウドストレージ(Amazon S3、Google Cloud Storage、またはAzure Storage)に保存します。外部ストレージがSnowflakeの一部ではありません。データ保護と回復の構成を含む、外部クラウドストレージの場所のすべての管理はお客様の責任となります。Snowflakeは、Icebergテーブルの Fail-safe ストレージを提供しません。

Snowflakeは 外部ボリューム を使用してストレージの場所に接続します。

IcebergテーブルにはSnowflakeのストレージコストは発生しません。詳細については、 請求 をご参照ください。

外部ボリューム

外部ボリュームは、外部クラウドストレージのIDおよびアクセス管理(IAM)エンティティを格納する、名前付きのアカウントレベルのSnowflakeオブジェクトです。Snowflakeは外部ボリュームでクラウドストレージに安全に接続し、テーブルデータ、Icebergメタデータ、テーブルスキーマ、パーティション、その他のメタデータを格納するマニフェストファイルにアクセスします。

1つの外部ボリュームで1つまたは複数のIcebergテーブルをサポートできます。

Icebergテーブルの外部ボリュームを設定するには、 Icebergテーブル用に外部ボリュームを構成する をご参照ください。

Icebergカタログ

Icebergカタログは、コンピュートエンジンがIcebergテーブルを管理し、ロードできるようにします。カタログは Icebergテーブル仕様 の最初のアーキテクチャーレイヤーを形成し、次をサポートする必要があります。

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

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

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

Snowflakeは様々な カタログオプション をサポートしています。例えば、SnowflakeをIcebergカタログとして使用したり、 カタログ統合 を使用してSnowflakeを AWS Glueのような外部のIcebergカタログに接続したり、オブジェクトストレージのIcebergメタデータファイルに接続したりできます。

カタログ統合

カタログ統合は、 SnowflakeをIcebergカタログ として使用しない場合に、Icebergテーブルのメタデータとスキーマのソースを定義する、名前付きアカウントレベルのSnowflakeオブジェクトです。

1つのカタログ統合で1つまたは複数のIcebergテーブルをサポートできます。

Icebergテーブルのカタログ統合を設定するには、 Icebergテーブルのカタログ統合を構成する をご参照ください。

メタデータとスナップショット

Icebergはスナップショットベースのクエリモデルを使用しており、データファイルはマニフェストファイルとメタデータファイルを使用してマッピングされます。スナップショットは、ある時点におけるテーブルの状態を表し、テーブル内のデータファイル一式にアクセスするために使用されます。

Snowflake は、 DATA_RETENTION_TIME_IN_DAYS パラメーターを使用して、Icebergテーブルのタイプに応じて異なる方法でメタデータを処理します。

注釈

history.expire.min-snapshots-to-keep テーブルプロパティ を使用してスナップショットのデフォルトの最小数を指定することは、どのタイプのIcebergテーブルでもサポートされていません。

SnowflakeをIcebergカタログとして使用するテーブル

このテーブルタイプでは、Snowflakeは定期的にメタデータを生成し、メタデータを外部ボリューム上のテーブルのParquetファイルに書き込みます。

Snowflakeは、 DATA_RETENTION_TIME_IN_DAYS の値を使用して次のことを決定します。

  • テーブルメタデータのサイズを小さくするために、古いテーブルスナップショットを期限切れにする時期。

  • Time Travel とテーブルのドロップ解除をサポートするために、テーブルのメタデータを保持する期間。保持期間が終了すると、Snowflakeはそのテーブルに対して書き込んだテーブルメタデータとスナップショットを外部ボリュームの場所から削除します。

    注釈

    Snowflakeは、Icebergテーブルの Fail-safe をサポートしていません。テーブルデータはお客様が管理する外部クラウドストレージにあるためです。Icebergテーブルのデータを保護するには、クラウドプロバイダーにデータ保護と回復を構成する必要があります。

カタログ統合を使用するテーブル

Snowflakeは、 DATA_RETENTION_TIME_IN_DAYS の値を使用して、Snowflake Time Travel の保持期間を設定し、テーブルをドロップ解除します。保持期間が終了しても、SnowflakeはテーブルのIcebergメタデータまたはスナップショットを外部クラウドストレージから 削除しません

このテーブルタイプに DATA_RETENTION_TIME_IN_DAYS を設定するには、Snowflakeは現在のメタデータファイルから history.expire.max-snapshot-age-ms の値を取得し、その値を日数に変換します(切り捨て)。

Snowflakeがメタデータファイルに history.expire.max-snapshot-age-ms を見つけないか、値を解析できない場合、 DATA_RETENTION_TIME_IN_DAYS を5日のデフォルト値(Apache Icebergのデフォルト値)に設定します。

クロスクラウド/クロスリージョンのサポート

クロスクラウド/クロスリージョンのサポートはIcebergテーブルのタイプによって異なります。

テーブルタイプ

クロスクラウド/クロスリージョンのサポート

メモ

カタログ統合 を使用するテーブル

外部ボリュームの アクティブなストレージの場所 がSnowflakeアカウントと同じクラウドプロバイダーまたは同じリージョンにない場合、以下の制限が適用されます。

  • 更新された最新のスナップショットに関する情報を取得するために SYSTEM$GET_ICEBERG_TABLE_INFORMATION 関数を使用することはできません。

  • カタログとしてSnowflakeを使用するようにテーブルを変換することはできません。

Snowflakeアカウントと外部ボリュームが異なるリージョンにある場合、外部クラウドストレージアカウントでテーブルをクエリする際にエグレスコストが発生します。

SnowflakeをIcebergカタログとして 使用するテーブル

外部ボリュームは、Snowflakeアカウントをホストしているのと同じクラウドプロバイダー(同じリージョン内)の アクティブなストレージの場所 を使用する必要があります。

アクティブな場所が同じリージョンにない場合、 CREATE ICEBERG TABLE ステートメントはユーザーエラーを返します。

請求

Snowflakeは、Icebergテーブルを使用する際に、仮想ウェアハウス(コンピュート)の使用料とクラウドサービスをアカウントに請求します。

Snowflakeはお客様のアカウントに次について請求 しません

  • Icetableテーブルのストレージコスト。クラウドストレージプロバイダーがデータストレージの使用料を直接請求します。

  • Icebergテーブルが使用するアクティブなバイト数。ただし、 TABLE_STORAGE_METRICS ビュー がIcebergテーブルの ACTIVE_BYTES を表示し、テーブルがどれだけのストレージを占有しているかを把握するのに役立ちます。

注釈

Snowflakeアカウントと外部ボリュームが異なるリージョンにある場合、外部クラウドストレージアカウントでテーブルをクエリする際にエグレスコストが発生します。

Icebergカタログのオプション

SnowflakeでIcebergテーブルを作成する場合、Snowflakeを Icebergカタログ として使用するか、 カタログ統合 を使用することができます。

次のテーブルは、これらのオプションの相違点をまとめたものです。

SnowflakeをIcebergカタログとして使用

カタログ統合を使用

読み取りアクセス

書き込みアクセス

❌ 完全なプラットフォームのサポートに、カタログとしてSnowflakeを使用するようにテーブルを変換することができます。

データとメタデータのストレージ

外部ボリューム(クラウドストレージ)

外部ボリューム(クラウドストレージ)

完全なプラットフォームのサポート

Snowflake Icebergカタログ SDK と動作

SnowflakeをIcebergカタログとして使用

IcebergカタログとしてSnowflakeを使用するIcebergテーブルは、読み取りと書き込みアクセスでSnowflakeプラットフォームを完全にサポートします。テーブルデータとメタデータは外部クラウドストレージに保存され、Snowflakeは 外部ボリューム を使用してアクセスします。Snowflakeがテーブルのコンパクションなど、ライフサイクルのメンテナンスをすべて行います。

SnowflakeをIcebergカタログとして使用するIcebergテーブルの仕組み

カタログ統合を使用

カタログ統合 を使用するIcebergテーブルは、読み取り専用アクセスで限定的なSnowflakeプラットフォームサポートを提供します。テーブルデータとメタデータは外部クラウドストレージに保存され、Snowflakeは 外部ボリューム を使用してアクセスします。このテーブル型では、Snowflakeはカタログ統合を使用してIcebergメタデータとスキーマに関する情報を取得します。Snowflakeはテーブルのライフサイクル管理を行いません。

このオプションを使用すると、 AWS Glueなどの外部Icebergカタログを使用するIcebergテーブルを作成したり、オブジェクトストレージでIcebergメタデータファイルからテーブルを作成できます。次の図は、Icebergテーブルが外部Icebergカタログとのカタログ統合をどのように使用するかを示しています。

カタログ統合を使用するIcebergテーブルの仕組み

考慮事項と制約

次の考慮事項と制限はIcebergテーブルに適用され、変更される場合があります。

Iceberg

  • Apache Iceberg仕様のバージョン1と2は、次の 機能: を除いてサポートされています。

    • 行レベルの削除(位置の削除または均等削除のいずれか)。

    • history.expire.min-snapshots-to-keep テーブルプロパティ を使用して、保持するデフォルトの最小スナップショット数を指定します。詳細については、 メタデータとスナップショット をご参照ください。

  • bucket 変換関数を使用したIcebergパーティショニングは、条件句を使用して結果をフィルターするクエリのパフォーマンスに影響を与えます。

  • 次の条件が当てはまる場合は、オブジェクトストレージ内のファイルから作成されたIcebergテーブルはサポートされません。

    • テーブルにID変換を定義するパーティション仕様が含まれている。

    • パーティション仕様のソース列がParquetファイルに 存在しない

  • Snowflakeで管理されていないIcebergテーブルでは、スナップショットの有効期限が切れる前に定期的にテーブルを更新する限り、テーブル作成後に生成されたスナップショットへのTime Travelがサポートされます。

ファイル形式

  • サポートはApache Parquetファイルに制限されています。

  • 符号なし整数論理型を使用するParquetファイルはサポートされていません。

外部ボリューム

  • 外部ボリュームのクラウドストレージの場所には、直接認証情報を使用してアクセスする必要があります。ストレージ統合はサポートされていません。

  • 信頼関係は、作成する外部ボリュームごとに個別に構成する必要があります。

メタデータファイル

  • メタデータファイルはIcebergテーブルの最新のスナップショットを識別しません。

  • ALTER ICEBERG TABLE コマンドを使用してデータファイルやスナップショットの場所を変更することはできません。これらの設定を変更するには、テーブルを(CREATE OR REPLACE ICEBERG TABLE 構文を使用して)再作成する必要があります。

Snowflake機能

  • 現在、Icebergテーブルでは次の機能とアクションはサポートされていません。

    • Icebergテーブルからクローンを作成する。加えて、データベースやスキーマのクローンにはIcebergテーブルは含まれません。

    • ASSOCIATE_SEMANTIC_CATEGORY_TAGS ストアドプロシージャを使用して タグ を自動的に適用する。

    • Snowflakeスキーマの進化。ただし、Snowflakeをカタログとして使用するIcebergテーブルは Icebergスキーマの進化 をサポートします。

      注釈

      Snowflakeバージョン 7.42より前に 作成されたテーブルはIcebergスキーマの進化をサポートしていません。

    • 仮または一時的Icebergテーブルの作成。

    • Icebergテーブル、外部ボリューム、またはカタログ統合の 複製

      さらに、プライマリデータベースにIcebergテーブルが含まれている場合、Icebergテーブルは更新操作の失敗の原因となります。 [1]

  • 履歴データのクエリ はIcebergテーブルでサポート されています

  • クラスタリング のサポートはIcebergテーブルの型によって異なります。

    テーブルタイプ

    メモ

    SnowflakeをIcebergカタログとして使用するテーブル

    CREATE ICEBERG TABLE または ALTER ICEBERG TABLE コマンドのいずれかを使用して、クラスタリングキーを設定します。クラスタリングキーを設定または管理するには、 CREATE ICEBERG TABLEALTER ICEBERG TABLE をご参照ください。

    カタログ統合を使用するテーブル

    クラスタリングはサポートされていません。

    変換されたテーブル

    Snowflakeは、テーブルを変換した後にファイルが作成された場合、または DML ステートメントを使用してファイルが変更された場合にのみ、ファイルをクラスタリングします。

サードパーティクライアントによるIcebergのデータ、メタデータへのアクセス

  • サードパーティクライアントは、Snowflakeをカタログとして使用しているIcebergテーブルへのデータの追加、削除、アップサートはできません。