Apache Iceberg™ テーブルのメタデータと保持

Snowflakeは、使用するカタログのタイプ(Snowflakeまたは外部)に従って、 Apache Iceberg™ テーブルのメタデータを処理します。

注釈

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

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

Snowflakeはこのテーブルタイプのメタデータのライフサイクルを管理し、テーブルデータとスナップショットの保持期間に基づいて古いメタデータ、マニフェストリスト、マニフェストファイルを削除します。

テーブルデータとスナップショットの保持期間を設定するには、アカウント、データベース、スキーマ、またはテーブルレベルで DATA_RETENTION_TIME_IN_DAYS パラメーターを設定します。

作成

Snowflakeは、Apache Iceberg仕様のバージョン2のメタデータを定期的に生成し、メタデータを外部ボリューム上のファイルに書き込みます。それぞれの新しいメタデータファイルには、最後にSnowflakeが生成したメタデータファイルが作成されてから、 DML または DDL のすべての変更が含まれています。

SYSTEM$GET_ICEBERG_TABLE_INFORMATION 関数を使用して、オンデマンドでメタデータを作成することもできます。手順については、 DML の変更のスナップショットを生成する をご参照ください。

メタデータファイルの場所については、 データとメタデータのディレクトリ を参照してください。

メタデータ作成履歴の表示

メタデータ生成の全試行履歴にアクセスするには、アカウントのクエリ履歴を表示し、結果をフィルタリングします。SQL テキストから SYSTEM$GET_ICEBERG_TABLE_INFORMATION 関数名を検索します。

Snowflakeは内部的に同じ SYSTEM$GET_ICEBERG_TABLE_INFORMATION 関数を使用してテーブルメタデータを生成します。Snowflakeによる試行は、クエリ履歴の SYSTEM というユーザーの下に表示されます。クエリ履歴の STATUS 列は、メタデータが正常に生成されたかどうかを示します。

表示オプションについては、 クエリ履歴でクエリのアクティビティをモニターする を参照してください。

削除

以下のイベントが発生すると、Snowflakeは外部クラウドストレージからIcebergメタデータを削除します。

  • テーブルを削除した後。

  • Icebergメタデータが期限切れのスナップショットまたはテーブルデータを参照している場合。

データ保持期間が終了しても、すぐに削除されるわけではありません。その結果、メタデータストレージは、クラウドストレージプロバイダーによって、テーブルの寿命よりも長い期間コストが発生する可能性があります。

警告

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

テーブルを削除した後

テーブルを削除した場合、 UNDROP ICEBERG TABLE コマンドを使用することで、データ保持期間内にテーブルを復元することができます。

保持期間が終了すると、Snowflakeは外部ボリュームの場所から書き込んだテーブルメタデータとスナップショットを削除します。削除は非同期に行われ、保持期間が過ぎてから完了するまで数日かかることもあります。

注釈

変換されたテーブル に対して、Snowflakeはテーブル変換 後に 生成されたメタデータのみを削除します。

スナップショットの期限が切れた後

Snowflakeは、データ保持期間が過ぎると、期限切れのスナップショットに関連するIcebergメタデータファイルを削除します。削除は通常、スナップショットの期限が切れてから7~14日後に行われます。

期限切れになるのは、以前のテーブルスナップショットだけです。Snowflakeは、外部クラウドストレージからテーブルの最新(現在の)状態を表すメタデータファイルを削除することはありません。

外部カタログを使用するテーブル

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

Snowflakeは、テーブルレベルで DATA_RETENTION_TIME_IN_DAYS を次の値のうちの小さい方に設定します。

  • 現在のメタデータファイルの history.expire.max-snapshot-age-ms の値。Snowflakeは値を日数に変換します(切り捨て)。

  • Snowflakeアカウントのエディション に応じて、以下の値を指定します。

    • Standard Edition: 1日。

    • Enterprise Editionまたはそれ以上: 5日。

Snowflakeでは、DATA_RETENTION_TIME_IN_DAYSの値を手動で変更することはできません。値を変更するには、メタデータファイルの history.expire.max-snapshot-age-ms を更新し、 テーブルをリフレッシュ する必要があります。

Time Travel

Snowflake Time Travel を使用すると、Snowflakeを使用してテーブルの履歴データをクエリできます。

また、サードパーティのコンピュートエンジンを使用して、 Snowflakeで管理されたテーブルを Snowflake Open Catalog と同期する または Snowflakeカタログ SDK を使用する際に、Snowflakeで管理されたテーブルに対してTime Travelクエリを実行することもできます。

データ保持期間内にコミットされたスナップショットをクエリできます。データ保持期間を指定するには、 DATA_RETENTION_TIME_IN_DAYS オブジェクトパラメーターを設定します。

テーブルデータを削除したり、テーブルをドロップすると、Snowflakeはテーブルの保持期間が終了した後にオブジェクトを削除します。この場合、クラウドストレージプロバイダーとの間で、テーブルの耐用年数以上のコストが発生する可能性があります。