概要
BigQuery 上で Apache Iceberg 用の BigQuery テーブルを Snowflake から参照する方法を共有します。本記事のオブジェクトストレージのカタログ統合にて、 BigQuery にてエクスポートした Iceberg のメタデータファイルから Snowflake にてテーブルを作成する方法です。
Getting Started with Snowflake and BigQuery via Icebergというチュートリアルにて紹介されている手順を参考にしています。
出所:Getting Started with Snowflake and BigQuery via Iceberg
BigQuery にてエクスポートした Iceberg のメタデータファイルを指定する方法です。
上記のチュートリアルにて紹介されているのですが、下記のノートブックが BigQuery のメタデータを同期する際に参考となることが紹介されています。
事前準備
下記記事におけるデータの挿入確認の手順まで実施してください。本記事はGoogle Colab から Apache Iceberg 用の BigQuery テーブルを参照以降の手順を Snowflake で実施する手順となっています。
実施手順
1. Snowflake にて検証用データベースを作成
CREATE OR REPLACE DATABASE BQ_TO_SF_DB;
USE DATABASE BQ_TO_SF_DB;
2. Snowflake にて GCS に対する外部 Volume を作成
CREATE OR REPLACE EXTERNAL VOLUME my_gcs_10_vol
STORAGE_LOCATIONS = (
(
NAME = 'my_gcs_10_vol',
STORAGE_PROVIDER = 'GCS',
STORAGE_BASE_URL = 'gcs://bg_iceberg'
)
)
ALLOW_WRITES = TRUE;
下記にて出力されたアカウントに対して Google Cloud Storage (GCS)の権限を付与します。
DESC EXTERNAL VOLUME my_gcs_10_vol;
SELECT
PARSE_JSON($4):STORAGE_GCP_SERVICE_ACCOUNT::string AS STORAGE_GCP_SERVICE_ACCOUNT
FROM TABLE(RESULT_SCAN(LAST_QUERY_ID()))
WHERE $2 = 'STORAGE_LOCATION_1';
検証が成功することを確認します。
-- 読み取り専用の場合: List 等の検証
SELECT SYSTEM$VERIFY_EXTERNAL_VOLUME('my_gcs_10_vol')
3. Snowflake にて OBJECT_STORE のカタログ統合を作成
CREATE CATALOG INTEGRATION sf_iceberg_catalog_01
CATALOG_SOURCE = OBJECT_STORE
TABLE_FORMAT = ICEBERG
ENABLED = TRUE;
4. Snowflake にて 外部 Iceberg テーブルを作成
BigQuery にてテーブルの Iceberg のメタデータファイルをエクスポートし、エクスポートされたファイル名を確認します。
EXPORT TABLE METADATA FROM qiita.fist_table;
取得したバージョンの metadafa ファイルへのパスを指定してテーブルを作成します。
CREATE OR REPLACE ICEBERG TABLE manabian_table_01
EXTERNAL_VOLUME = my_gcs_10_vol
CATALOG = sf_iceberg_catalog_01
METADATA_FILE_PATH = 'qiita/fist_table/metadata/v{取得したバージョン}.metadata.json';
データを取得できることを確認します。
SELECT * FROM manabian_table_01 ORDER BY 1;
BigQuery 側にてデータ処理後の対応
BigQuery にて一部のデータを削除します。
DELETE FROM
qiita.fist_table
WHERE
id > 3;
BigQuery にてメタデータファイルをエクスポートして、エクスポートされたファイル名を確認します。
EXPORT TABLE METADATA FROM qiita.fist_table;
Snowflake にてテーブルのメタデータのパスを更新します。
ALTER ICEBERG TABLE manabian_table_01
REFRESH 'qiita/fist_table/metadata/v{取得したバージョン}.metadata.json';
データを削除されていることを確認します。
SELECT * FROM manabian_table_01 ORDER BY 1;


















