Icebergテーブルを管理する¶
このトピックでは、 Icebergテーブル の管理に役立つ次のタスクを説明します。
カタログ統合を使用するIcebergテーブルを、IcebergカタログとしてSnowflakeを使用するテーブルに変換することもできます。詳細については、 Icebergテーブルの変換 をご参照ください。
テーブルのメタデータを手動で更新する¶
カタログ統合を使用する場合、 ALTER ICEBERG TABLE コマンドを使用して、指定したIcebergメタデータファイルからテーブルメタデータを更新できます。テーブルのメタデータを更新すると、メタデータが最新のテーブルの変更と同期されます。
AWS Glueをカタログとして使用しているIcebergテーブルのメタデータを更新します。¶
次の例は、Icebergカタログで AWS Glueを使用しているテーブルのメタデータを手動で更新します。テーブルを更新すると、 AWS Glue で発生した変更がテーブルに同期されます。
この型のIcebergテーブルでは、コマンドでメタデータファイルのパスを指定しません。
ALTER ICEBERG TABLE my_iceberg_table REFRESH;
オブジェクトストレージ内のファイルから作成されたIcebergテーブルのメタデータを更新する¶
次の例では、外部クラウドストレージの場所にあるIcebergメタデータファイルから作成されたテーブルを、メタデータファイルへの相対パスを指定して手動で更新します。メタデータファイルは、更新後のテーブルのデータを定義します。
ALTER ICEBERG TABLE my_iceberg_table REFRESH 'metadata/v1.metadata.json';
DML の変更のスナップショットを生成する¶
Snowflakeをカタログとして使用するテーブルの場合、Snowflakeは自動的にIcebergメタデータを生成します。Snowflakeは、テーブルの作成時に BASE_LOCATION
パラメーターで指定した場所にある外部ボリュームの metadata
という名前のフォルダーにメタデータを書き込みます。
あるいは、 SYSTEM$GET_ICEBERG_TABLE_INFORMATION 関数を呼び出して、新しい変更に対してIcebergメタデータを生成することもできます。
例:
SELECT SYSTEM$GET_ICEBERG_TABLE_INFORMATION('db1.schema1.it1');
出力:
+-----------------------------------------------------------------------------------------------------------+
| SYSTEM$GET_ICEBERG_TABLE_INFORMATION('DB1.SCHEMA1.IT1') |
|-----------------------------------------------------------------------------------------------------------|
| {"metadataLocation":"s3://mybucket/metadata/v1.metadata.json","status":"success"} |
+-----------------------------------------------------------------------------------------------------------+
Icebergテーブルにクエリを実行する¶
Icebergテーブルにクエリを実行するには、ユーザーに次の権限を付与または継承させる必要があります。
テーブルを含むデータベースとスキーマに対する USAGE 権限。
テーブルに対する SELECT 権限。
SELECT ステートメントを使用してIcebergテーブルにクエリを実行できます。例:
SELECT col1, col2 FROM my_iceberg_table;
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;
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';