概要
本記事では、Google Colab で操作した Apache Iceberg のデータを用い、Apache Iceberg 用の BigLake 外部テーブルを作成する手順を解説します。Iceberg JSON メタデータファイルを使用してテーブルを作成し、bq コマンドを使ったメタデータの更新方法も紹介しています。
出所:Apache Iceberg 用の BigLake 外部テーブルを作成する | BigQuery | Google Cloud
出所:Apache Iceberg 用の BigLake 外部テーブルを作成する | BigQuery | Google Cloud
テーブルのメタデータ更新手順の詳細は、以下のドキュメントをご確認ください。
出所:Apache Iceberg 用の BigLake 外部テーブルを作成する | BigQuery | Google Cloud
手順
Apache Iceberg 用 BigLake 外部テーブルの作成
1. GCS 上に Apache Iceberg テーブルを作成
まず、以下の記事に従って、Google Cloud Storage 上に Apache Iceberg テーブルを作成してください。
作成後、v2.metadata.json のパス(例:gs://manabianqiita/iceberg/default/first_table/metadata/v2.metadata.json
)をコピーします。
2. BigLake 外部テーブルの作成
コピーした v2.metadata.json のパスを利用して、以下の SQL コマンドを実行し、外部テーブルを作成します。
CREATE EXTERNAL TABLE test.default__first_table
OPTIONS(
format = 'ICEBERG',
uris = ['gs://manabianqiita/iceberg/default/first_table/metadata/v2.metadata.json']
);
CONNECTION (接続)を利用せずにテーブルを作成しておりますが、Delta Lake 用の BigLake 外部テーブルドキュメントにて下記のように記述されており、おそらく本番環境では Apache Iceberg 用の BigLake 外部テーブルでも同様に非推奨です。
接続なしでも Delta Lake 外部テーブルを作成できますが、次の理由からおすすめしません。
出所:Delta Lake 用の BigLake 外部テーブルを作成する | BigQuery | Google Cloud
テーブル作成後、下記のクエリでデータ取得を確認します。
SELECT
*
FROM
test.default__first_table
ORDER BY
id
LIMIT 10;
Apache Iceberg 用 BigLake 外部テーブルのメタデータ更新
1. Google Colab にて DELETE 操作の実行
Google Colab 上で以下の Python コードを実行し、対象テーブルのレコード(id > 3)を削除します。
spark.sql("""
DELETE FROM
default.first_table
WHERE
id > 3;
""")
2. BigQuery で更新前の状態を確認
次に、BigQuery 上で再度クエリを実行し、削除操作前のデータ状態であることを確認します。
SELECT
*
FROM
test.default__first_table
ORDER BY
id
LIMIT 10;
3. 最新 metadata file のパスを GCS 上で取得
GCS 上で最新の metadata file(v3.metadata.json)のパスを取得します。
4. bq コマンドでメタデータ更新定義ファイルを作成
Google Cloud コンソールの bq コマンドラインを使用し、{project_id}
を実際のプロジェクト ID に置き換えて以下のコマンドを実行します。
bq mkdef --source_format=ICEBERG \
"gs://manabianqiita/iceberg/default/first_table/metadata/v3.metadata.json" > biglake_version
この操作により、biglake_version
という名前の JSON ファイルが作成されます。ファイル内容は以下の通りです。
cat biglake_version
{
"autodetect": true,
"sourceFormat": "ICEBERG",
"sourceUris": [
"gs://manabianqiita/iceberg/default/first_table/metadata/v3.metadata.json"
]
}
5. bq コマンドで BigQuery のテーブルメタデータを更新
作成した JSON 定義ファイルを基に、以下のコマンドでテーブルのメタデータを更新します。
bq update --autodetect_schema --external_table_definition=biglake_version \
{project_id}:test.default__first_table
6. BigQuery で更新後の状態を確認
最後に、以下のクエリを実行して、テーブル内のデータが更新されていることを確認します。
SELECT
*
FROM
test.default__first_table
ORDER BY
id
LIMIT 10;
また、テーブルのプロパティを確認すると、Source URI(s)
が gs://manabianqiita/iceberg/default/first_table/metadata/v3.metadata.json
となっていることが確認できます。