查询表

查询表会使用 Lakehouse 运行时目录管理的元数据从底层 Cloud Storage 文件读取数据。

您可以从 Spark 和 Trino 等开源引擎运行查询,也可以使用四部分表名语法(P.C.N.T 语法)直接从 BigQuery 运行查询。

准备工作

  1. 验证是否已为您的 Google Cloud 项目启用结算功能。

  2. 启用 BigLake API。

    启用 API 所需的角色

    如需启用 API,您需要拥有 Service Usage Admin IAM 角色 (roles/serviceusage.serviceUsageAdmin),该角色包含 serviceusage.services.enable 权限。了解如何授予角色

    启用 API

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

所需的角色

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

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

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

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

表功能和支持

在 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。稍后,当您使用 P.C.N.T 语法在 BigQuery 中查询目录时,会用到此名称。例如,my-project.catalog_id.quickstart_namespace.quickstart_table

  • NAMESPACE_OR_SCHEMA_NAME:如果使用 Spark,则为表命名空间;如果使用 Trino,则为表架构名称。

  • TABLE_NAME:表的名称。

使用时间旅行进行查询

您可以使用时间旅行查询 Lakehouse 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';

后续步骤