使用 DML 陳述式修改資料

修改資料後,您可以在 Lakehouse 執行階段目錄中,更新、刪除及合併 Apache Iceberg 資料表中的記錄。

在資料表啟用 BigQuery DML 後,您就能從 BigQuery 執行標準 DML 陳述式,以及 Spark 和 Trino 等開放原始碼引擎,在 Cloud Storage 儲存的一份資料上,實現完整的寫入互通性。

事前準備

  1. 確認 Google Cloud 專案已啟用計費功能。

  2. 啟用 BigLake API (如果尚未啟用)。

    啟用 API 所需的角色

    您必須具備 serviceusage.services.enable 權限,才能啟用 API。如果您建立了專案,可能已透過「擁有者」角色 (roles/owner) 取得這項權限。否則,您可以透過「Service Usage 管理員」角色 (roles/serviceusage.serviceUsageAdmin) 取得這項權限。瞭解如何授予角色。

    啟用 API

  3. 使用 Apache Iceberg REST 目錄端點設定 Lakehouse 執行階段目錄。

必要的角色

如要取得修改資料表資料所需的權限,請要求管理員在專案和 Storage bucket 中,授予您下列 IAM 角色:

  • 以憑證販售模式寫入資料表資料:BigLake 編輯者 (roles/biglake.editor) - 專案
  • 在非憑證臨時配發模式下寫入資料表資料:
    • BigLake 編輯者 (roles/biglake.editor) - 專案
    • Storage 物件使用者 (roles/storage.objectUser) - Cloud Storage bucket

如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。

您或許也能透過自訂角色或其他預先定義的角色,取得必要權限。

表格功能和支援

使用 Lakehouse 執行階段目錄中的資料表時,建議您瞭解不同的資料表類型及其選擇加入功能。如要進一步瞭解如何使用 Apache Iceberg 資料表,請參閱「Apache Iceberg 資料表總覽」。

支援的 Iceberg 資料表

僅支援 Apache Iceberg V2 (正式發布版) 和 V3 (預先發布版) 資料表。不支援 Iceberg V1 資料表。如要升級現有的 V1 資料表,請參閱「將 Iceberg V1 資料表升級至 V2」。

使用表格選項 (預先發布版)

您可以設定特定資料表屬性,選擇使用 BigQuery 代管功能,例如 BigQuery 資料操縱語言 (DML) 和自動資料表管理。啟用這些功能的方式,取決於資料表的建立位置:

  • 從 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);

後續步驟