データを変更すると、Lakehouse ランタイム カタログの Apache Iceberg テーブルのレコードを更新、削除、マージできます。
テーブルで BigQuery DML が有効になっている場合、Spark や Trino などのオープンソース エンジンとともに BigQuery から標準 DML ステートメントを実行して、Cloud Storage に保存されているデータの単一コピーで完全な書き込み相互運用性を実現できます。
始める前に
-
BigLake API を有効にします(有効になっていない場合)。
API を有効にするために必要なロール
API を有効にするには、
serviceusage.services.enable権限が必要です。プロジェクトを作成した場合は、オーナーロール(roles/owner)を介してこの権限がすでに付与されている可能性があります。それ以外の場合は、Service Usage 管理者ロール(roles/serviceusage.serviceUsageAdmin)を介してこの権限を取得できます。ロールを付与する方法を確認する。 - Apache Iceberg REST カタログ エンドポイントを使用して Lakehouse ランタイム カタログを設定します。
必要なロール
テーブル内のデータを変更するために必要な権限を取得するには、プロジェクトとストレージ バケットに対する次の IAM ロールを付与するよう管理者に依頼してください。
-
認証情報自動販売モードでテーブルデータを書き込む: BigLake 編集者(
roles/biglake.editor)- プロジェクト -
非認証情報ベンディング モードでテーブルデータを書き込む。
- BigLake 編集者(
roles/biglake.editor)- プロジェクト - Storage オブジェクト ユーザー(
roles/storage.objectUser)- Cloud Storage バケット
- BigLake 編集者(
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。
テーブルの機能とサポート
Lakehouse ランタイム カタログでテーブルを使用する場合は、さまざまなテーブルタイプとそのオプトイン機能を理解しておくと役立ちます。Apache Iceberg テーブルの使用方法の詳細については、Apache Iceberg テーブルの概要をご覧ください。
サポートされている Iceberg テーブル
Apache Iceberg V2(一般提供)テーブルと V3(プレビュー)テーブルのみがサポートされています。Iceberg V1 テーブルはサポートされていません。既存の V1 テーブルをアップグレードするには、Iceberg V1 テーブルを V2 にアップグレードするをご覧ください。
テーブル オプションを使用する(プレビュー)
特定のテーブル プロパティを構成することで、BigQuery データ操作言語(DML)や自動テーブル管理などの BigQuery マネージド機能を使用するようにオプトインできます。これらの機能は、テーブルが作成される場所に応じて異なる方法で有効になります。
- BigQuery から: BigQuery DML と自動テーブル管理はデフォルトで有効になっています。
- オープンソース エンジンから: オプトインするには、テーブル プロパティを明示的に構成する必要があります。詳細については、テーブル オプションを構成するをご覧ください。
データの更新
テーブル内の既存の行を更新します。
Spark
ALTER TABLE TABLE_NAME SET TBLPROPERTIES ('gcp.biglake.bigquery-dml.enabled' = true);
UPDATE TABLE_NAME SET data = 'updated row' WHERE id = 1;
Trino
ALTER TABLE TABLE_NAME SET PROPERTIES "gcp.biglake.bigquery-dml.enabled" = 'true';
UPDATE TABLE_NAME SET data = 'updated row' WHERE id = 1;
BigQuery
UPDATE `PROJECT_ID.CATALOG_ID.NAMESPACE.TABLE_NAME`
SET data = "updated row"
WHERE id = 1;
次のように置き換えます。
PROJECT_ID: 実際の Google Cloudプロジェクト ID。CATALOG_ID: Lakehouse ランタイム カタログ ID。NAMESPACE: Iceberg 名前空間の名前。TABLE_NAME: Iceberg テーブルの名前。
データの削除
テーブルから特定の行を削除します。
Spark
ALTER TABLE TABLE_NAME SET TBLPROPERTIES ('gcp.biglake.bigquery-dml.enabled' = true);
DELETE FROM TABLE_NAME WHERE id = 1;
Trino
ALTER TABLE TABLE_NAME SET PROPERTIES "gcp.biglake.bigquery-dml.enabled" = 'true';
DELETE FROM TABLE_NAME WHERE id = 1;
BigQuery
DELETE FROM `PROJECT_ID.CATALOG_ID.NAMESPACE.TABLE_NAME`
WHERE id = 1;
データを統合する
ソーステーブルのデータをターゲット Iceberg テーブルにマージします。
Spark
ALTER TABLE TARGET_TABLE SET TBLPROPERTIES ('gcp.biglake.bigquery-dml.enabled' = true);
MERGE INTO TARGET_TABLE t
USING SOURCE_TABLE s
ON t.id = s.id
WHEN MATCHED THEN
UPDATE SET t.data = s.data
WHEN NOT MATCHED THEN
INSERT (id, data) VALUES (s.id, s.data);
Trino
ALTER TABLE TARGET_TABLE SET PROPERTIES "gcp.biglake.bigquery-dml.enabled" = 'true';
MERGE INTO TARGET_TABLE t
USING SOURCE_TABLE s
ON t.id = s.id
WHEN MATCHED THEN
UPDATE SET t.data = s.data
WHEN NOT MATCHED THEN
INSERT (id, data) VALUES (s.id, s.data);
BigQuery
MERGE `PROJECT_ID.CATALOG_ID.NAMESPACE.TARGET_TABLE` t
USING `PROJECT_ID.CATALOG_ID.NAMESPACE.SOURCE_TABLE` s
ON t.id = s.id
WHEN MATCHED THEN
UPDATE SET data = s.data
WHEN NOT MATCHED THEN
INSERT (id, data) VALUES (id, data);
次のステップ
- テーブルをクエリする方法を学習する。
- テーブル オプションを構成する方法を確認する。