查詢資料表

Lakehouse 執行階段目錄可讓您分析儲存在 Cloud Storage 的 Apache Iceberg 資料表,不必移動或複製資料。您可以從 Apache Spark 和 Trino 等開放原始碼引擎執行 SQL 查詢,也可以使用四部分 P.C.N.T (Project.Catalog.Namespace.Table) 資料表名稱,直接從 BigQuery 執行 SQL 查詢。

事前準備

  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.viewer) - 專案
  • 在非憑證臨時配發模式下讀取資料表資料:
    • BigLake 檢視者 (roles/biglake.viewer) - 專案
    • Storage 物件檢視者 (roles/storage.objectViewer) - 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 和自動資料表管理功能預設為啟用。
  • 開放原始碼引擎:如要選擇加入,必須明確設定資料表屬性。詳情請參閱「設定表格選項」。

從 BigQuery 查詢資料表時,您可以存取標準 Iceberg 資料表,以及啟用 BigQuery 代管功能的資料表。如需詳細操作說明,請參閱「設定表格選項」。

查詢資料表

選取資料表中的所有資料:

Spark

spark.sql("SELECT * FROM TABLE_NAME;").show()

Trino

SELECT * FROM TABLE_NAME;

BigQuery

如要從 BigQuery 查詢 Lakehouse 執行階段目錄中的 Apache Iceberg 資料表,請在查詢中使用下列格式的四部分資料表名稱:PROJECT_NAME.CATALOG_ID.NAMESPACE_OR_SCHEMA_NAME.TABLE_NAME。

SELECT * FROM `PROJECT_NAME.CATALOG_ID.NAMESPACE_OR_SCHEMA_NAME.TABLE_NAME`;

替換下列值:

  • PROJECT_NAME:Lakehouse 執行階段目錄中,擁有目錄的Google Cloud 專案。系統會向 Google Cloud 控制台中選取的Google Cloud 專案收取查詢費用。

  • CATALOG_ID:建立目錄時指定的 Lakehouse 執行階段目錄 ID。這個 ID 會在 BigQuery 查詢中做為目錄名稱。

    這個 ID 也是 Cloud Storage bucket 的名稱。

    舉例來說,如果您建立 bucket 來儲存目錄,並將其命名為 iceberg-bucket,則目錄名稱和 bucket 名稱都是 iceberg-bucket。稍後在 BigQuery 中使用 P.C.N.T 語法查詢目錄時,就會用到這個名稱。例如:my-project.catalog_id.quickstart_namespace.quickstart_table。

  • NAMESPACE_OR_SCHEMA_NAME:如果使用 Spark,則為資料表命名空間;如果使用 Trino,則為資料表結構定義名稱。

  • TABLE_NAME:資料表名稱。

使用時間旅行功能查詢

您可以使用時間旅行功能,查詢代管 Apache Iceberg 資料表的歷來資料。您可以使用 FOR SYSTEM_TIME AS OF 子句,從 BigQuery 進行時間旅行,也可以使用快照 ID、時間戳記、標記或分支版本,從 Spark 等開放原始碼引擎進行時間旅行。

依時間戳記查詢

如要查詢特定時間戳記的資料,請按照下列步驟操作:

Spark

SELECT * FROM NAMESPACE.TABLE_NAME TIMESTAMP AS OF '2026-02-26 01:21:00';

BigQuery

SELECT * FROM `PROJECT_ID.CATALOG_ID.NAMESPACE.TABLE_NAME` FOR SYSTEM_TIME AS OF '2026-02-26 01:21:00';

依快照 ID 查詢

如要查詢特定快照 ID 的資料,請按照下列步驟操作:

Spark

SELECT * FROM NAMESPACE.TABLE_NAME VERSION AS OF 10963874102873;

依據標記查詢

如要建立標記並查詢該標記的資料,請按照下列步驟操作:

Spark

-- Create tag 'historical-snapshot'
ALTER TABLE NAMESPACE.TABLE_NAME CREATE TAG 'historical-snapshot' AS OF VERSION 123456789012345;

-- Query by tag
SELECT * FROM NAMESPACE.TABLE_NAME VERSION AS OF 'historical-snapshot';

依分支版本查詢

如要建立分支版本並查詢該分支版本的資料,請按照下列步驟操作:

Spark

-- Create branch 'audit-branch'
ALTER TABLE NAMESPACE.TABLE_NAME CREATE BRANCH 'audit-branch' AS OF VERSION 123456789012345;

-- Query by branch
SELECT * FROM NAMESPACE.TABLE_NAME VERSION AS OF 'audit-branch';

後續步驟