Icebergテーブルを管理する

このトピックでは、 Icebergテーブル の管理に役立つ次のタスクを説明します。

カタログ統合を使用するIcebergテーブルを、IcebergカタログとしてSnowflakeを使用するテーブルに変換することもできます。詳細については、 Icebergテーブルの変換 をご参照ください。

テーブルのメタデータを手動で更新する

カタログ統合を使用する場合、 ALTER ICEBERG TABLE コマンドを使用して、指定したIcebergメタデータファイルからテーブルメタデータを更新できます。テーブルのメタデータを更新すると、メタデータが最新のテーブルの変更と同期されます。

AWS Glueをカタログとして使用しているIcebergテーブルのメタデータを更新します。

次の例は、Icebergカタログで AWS Glueを使用しているテーブルのメタデータを手動で更新します。この型のIcebergテーブルでは、コマンドでメタデータファイルのパスを指定する必要はありません。

ALTER ICEBERG TABLE my_iceberg_table REFRESH;
Copy

オブジェクトストレージ内のファイルから作成されたIcebergテーブルのメタデータを更新する

次の例では、外部クラウドストレージの場所にあるIcebergメタデータファイルから作成されたテーブルを、メタデータファイルへの相対パスを指定して手動で更新します。メタデータファイルは、更新後のテーブルのデータを定義します。

ALTER ICEBERG TABLE my_iceberg_table REFRESH 'metadata/v1.metadata.json';
Copy

DML の変更のスナップショットを生成する

Snowflakeをカタログとして使用するテーブルの場合、Snowflakeは自動的にIcebergメタデータを生成します。Snowflakeは、テーブルの作成時に BASE_LOCATION パラメーターで指定した場所にある外部ボリュームの metadata という名前のフォルダーにメタデータを書き込みます。

あるいは、 SYSTEM$GET_ICEBERG_TABLE_INFORMATION 関数を呼び出して、新しい変更に対してIcebergメタデータを生成することもできます。

例:

SELECT SYSTEM$GET_ICEBERG_TABLE_INFORMATION('db1.schema1.it1');
Copy

出力:

+-----------------------------------------------------------------------------------------------------------+
| SYSTEM$GET_ICEBERG_TABLE_INFORMATION('DB1.SCHEMA1.IT1')                                                   |
|-----------------------------------------------------------------------------------------------------------|
| {"metadataLocation":"s3://mybucket/metadata/v1.metadata.json","status":"success"}                         |
+-----------------------------------------------------------------------------------------------------------+

Icebergテーブルにクエリを実行する

Icebergテーブルにクエリを実行するには、ユーザーに次の権限を付与または継承させる必要があります。

  • テーブルを含むデータベースとスキーマ、およびテーブルに関連付けられた外部ボリュームに対する USAGE 権限。Snowflakeで管理されていないテーブルにクエリを実行するには、ユーザーにそのテーブルのカタログ統合に対する USAGE 権限が必要です。

  • テーブルに対する SELECT 権限。

SELECT ステートメントを使用してIcebergテーブルにクエリを実行できます。例:

SELECT col1, col2 FROM my_iceberg_table;
Copy

Icebergテーブルを更新する

INSERT ステートメントと UPDATE ステートメントを使用して、Snowflakeをカタログとして使用するIcebergテーブルを変更することができます。

次の例は、 store_sales という名前のIcebergテーブルに新しい値を挿入し、現在の値が-99の場合、 cola 列を1に更新します。

INSERT INTO store_sales values (-99);

UPDATE store_sales
  SET cola = 1
  WHERE cola = -99;
Copy

Icebergテーブルのストレージメトリクスを取得する

Snowflakeでは、Icebergテーブルの保管コストをお客様のアカウントに請求することはありません。しかし、 Snowflake Information Schema スキーマまたは Account Usage スキーマの TABLE_STORAGE_METRICS ビューと TABLES ビューをクエリすることで、Icebergテーブルがどれだけのストレージを使用しているかを追跡することができます。

次の例のクエリは、 ACCOUNT_USAGE.TABLE_STORAGE_METRICS ビューと ACCOUNT_USAGE.TABLES ビューを結合し、 TABLES.IS_ICEBERG 列でフィルタリングします。

SELECT metrics.* FROM
  snowflake.account_usage.table_storage_metrics metrics
  INNER JOIN snowflake.account_usage.tables tables
  ON (
    metrics.id = tables.table_id
    AND metrics.table_schema_id = tables.table_schema_id
    AND metrics.table_catalog_id = tables.table_catalog_id
  )
  WHERE tables.is_iceberg='YES';
Copy