查询表

借助 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 所需的角色

    如需启用 API,您需要拥有 serviceusage.services.enable 权限。如果您创建了项目,则可能已经通过 Owner 角色 (roles/owner) 拥有此权限。否则,您可以通过 Service Usage Admin 角色 (roles/serviceusage.serviceUsageAdmin) 获得此权限。了解如何授予角色。

    启用 API

  3. 使用 Apache Iceberg REST 目录端点设置 Lakehouse 运行时目录。

所需的角色

如需获得查询表所需的权限,请让管理员向您授予项目和存储桶的以下 IAM 角色:

  • 在凭据自动售卖模式下读取表数据:BigLake Viewer (roles/biglake.viewer) - 项目
  • 在非凭证自动售卖模式下读取表数据:
    • BigLake Viewer (roles/biglake.viewer) - 项目
    • Storage Object Viewer (roles/storage.objectViewer) - Cloud Storage 存储桶

如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。

您也可以通过自定义角色或其他预定义角色来获取所需的权限。

表格功能和支持

在 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';

后续步骤