Icebergテーブルを管理する

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

You can also convert an Iceberg table that uses a catalog integration into a table that uses Snowflake as the Iceberg catalog. To learn more, see Icebergテーブルの変換.

Manually refresh the table metadata

When you use a catalog integration, you can refresh the table metadata from a specified Iceberg metadata file using the ALTER ICEBERG TABLE command. Refreshing the table metadata synchronizes the metadata with the most recent table changes.

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

次の例は、Icebergカタログで AWS Glueを使用しているテーブルのメタデータを手動で更新します。テーブルを更新すると、 AWS Glue で発生した変更がテーブルに同期されます。

この型のIcebergテーブルでは、コマンドでメタデータファイルのパスを指定しません。

ALTER ICEBERG TABLE my_iceberg_table REFRESH;
Copy

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

The following example manually refreshes a table created from Iceberg metadata files in an external cloud storage location, specifying the relative path to a metadata file. The metadata file defines the data in the table after refreshing.

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テーブルにクエリを実行するには、ユーザーに次の権限を付与または継承させる必要があります。

  • The USAGE privilege on the database and schema that contain the table.

  • The SELECT privilege on the table.

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