Icebergテーブル

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

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

  • スキーマの進化

  • 隠しパーティション

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

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

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

SnowflakeでのIcebergテーブルの使用方法については、 クイックスタート: Icebergテーブルを使いはじめるにあたり を参照してください。

Icebergテーブルの仕組み

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

データストレージ

Icebergテーブルはデータとメタデータファイルを外部クラウドストレージ(Amazon S3、Google Cloud Storage、またはAzure Storage)に保存します。外部ストレージがSnowflakeの一部ではありません。外部クラウドストレージの場所のすべての管理は、お客様の責任となります。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テーブルのカタログ統合を構成する をご参照ください。

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

Snowflakeをカタログとして使用しているテーブルの場合、Snowflakeは定期的にメタデータを自動生成します。そして、メタデータを外部ボリューム上のテーブルのParquetファイルに書き込みます。

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

Snowflakeは古いIcebergテーブルスナップショットを期限切れにして、テーブルメタデータのサイズを削減します。

スナップショットの最大保存期間を決定するために、Snowflakeは現在のメタデータファイルから history.expire.max-snapshot-age-ms の値を取得し、その値を日数に変換(切り捨て)して DATA_RETENTION_TIME_IN_DAYS パラメーターに格納します。

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

注釈

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

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

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

テーブルタイプ

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

メモ

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

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

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

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

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

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

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

請求

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

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

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

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

Icebergカタログのオプション

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

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

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

カタログ統合を使用

読み取りアクセス

書き込みアクセス

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

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

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

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

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

Snowflake Icebergカタログ SDK と動作

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

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

How Iceberg tables that use Snowflake as the Iceberg catalog work

カタログ統合を使用

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

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

How Iceberg tables that use a catalog integration work

考慮事項と制約

次の考慮事項と制限は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テーブルでサポート されています

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

    テーブルタイプ

    メモ

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

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

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

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

    変換されたテーブル

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

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

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

次のトピック: