0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

BigQuery 上で Apache Iceberg 用の BigQuery テーブルを Snowflake から参照する方法

Posted at

概要

BigQuery 上で Apache Iceberg 用の BigQuery テーブルを Snowflake から参照する方法を共有します。本記事のオブジェクトストレージのカタログ統合にて、 BigQuery にてエクスポートした Iceberg のメタデータファイルから Snowflake にてテーブルを作成する方法です。

Getting Started with Snowflake and BigQuery via Icebergというチュートリアルにて紹介されている手順を参考にしています。

image.png

出所: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;

image.png

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;

image.png

下記にて出力されたアカウントに対して 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';

image.png

image.png

検証が成功することを確認します。

-- 読み取り専用の場合: List 等の検証
SELECT SYSTEM$VERIFY_EXTERNAL_VOLUME('my_gcs_10_vol')

image.png

3. Snowflake にて OBJECT_STORE のカタログ統合を作成

CREATE CATALOG INTEGRATION sf_iceberg_catalog_01
  CATALOG_SOURCE = OBJECT_STORE
  TABLE_FORMAT = ICEBERG
  ENABLED = TRUE;

image.png

4. Snowflake にて 外部 Iceberg テーブルを作成

BigQuery にてテーブルの Iceberg のメタデータファイルをエクスポートし、エクスポートされたファイル名を確認します。

EXPORT TABLE METADATA FROM qiita.fist_table;

image.png

image.png

最新バージョンのメタデータファイルを特定する方法として、 テーブルの medata ディレクトリ配下のversion-hint.textを確認する方法があります。

image.png

image.png

取得したバージョンの 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';

image.png

v0.metadata.json を指定した場合にはエラーとなります。

NotebookSqlException: 091322: SQL Compilation error: Failed to read from Iceberg file 'gcs://bg_iceberg/qiita/fist_table/metadata/v0.metadata.json': Cannot parse missing int: format-version

image.png

データを取得できることを確認します。

SELECT * FROM manabian_table_01 ORDER BY 1;

image.png

BigQuery 側にてデータ処理後の対応

BigQuery にて一部のデータを削除します。

DELETE FROM 
    qiita.fist_table
    WHERE
        id > 3;

image.png

BigQuery にてメタデータファイルをエクスポートして、エクスポートされたファイル名を確認します。

EXPORT TABLE METADATA FROM qiita.fist_table;

image.png

image.png

Snowflake にてテーブルのメタデータのパスを更新します。

ALTER ICEBERG TABLE manabian_table_01
  REFRESH 'qiita/fist_table/metadata/v{取得したバージョン}.metadata.json';

image.png

データを削除されていることを確認します。

SELECT * FROM manabian_table_01 ORDER BY 1;

image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?