借助 Lakehouse 运行时目录,您可以分析存储在 Cloud Storage 中的 Apache Iceberg 表,而无需移动或复制数据。您可以从 Apache Spark 和 Trino 等开源引擎运行 SQL 查询,也可以使用由四个部分组成的 P.C.N.T (Project.Catalog.Namespace.Table) 表名称直接从 BigQuery 运行 SQL 查询。
准备工作
-
启用 BigLake API(如果尚未启用)。
启用 API 所需的角色
如需启用 API,您需要拥有
serviceusage.services.enable权限。如果您创建了项目,则可能已经通过 Owner 角色 (roles/owner) 拥有此权限。否则,您可以通过 Service Usage Admin 角色 (roles/serviceusage.serviceUsageAdmin) 获得此权限。了解如何授予角色。 - 使用 Apache Iceberg REST 目录端点设置 Lakehouse 运行时目录。
所需的角色
如需获得查询表所需的权限,请让管理员向您授予项目和存储桶的以下 IAM 角色:
-
在凭据自动售卖模式下读取表数据:BigLake Viewer (
roles/biglake.viewer) - 项目 -
在非凭证自动售卖模式下读取表数据:
- BigLake Viewer (
roles/biglake.viewer) - 项目 - Storage Object Viewer (
roles/storage.objectViewer) - Cloud Storage 存储桶
- BigLake Viewer (
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
表格功能和支持
在 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。此标识符在 BigQuery 查询中用作目录名称。此标识符也是 Cloud Storage 存储桶的名称。
例如,如果您创建了用于存储目录的存储桶,并将其命名为
iceberg-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';
后续步骤
- 了解如何更改表。