Lakehouse for Apache Iceberg 支持通过跨云 Lakehouse 配置查询远程数据。配置完成后,系统支持在 BigQuery 中使用标准 SQL 或在 Managed Service for Apache Spark 中使用 Apache Spark 来访问数据。
本页介绍了在设置跨云 Lakehouse 后如何查询远程数据。
准备工作
您必须先完成以下操作,然后才能查询数据:
- 为 AWS Glue 或 Databricks Unity Catalog 设置跨云 Lakehouse。
- 确保远程目录中有数据。
所需角色
如需获得查询联合数据所需的权限,请让管理员向您授予项目的以下 IAM 角色:
-
在 BigQuery 中查询数据:
BigQuery Data Viewer (
roles/bigquery.dataViewer) -
运行 BigQuery 作业:
BigQuery Job User (
roles/bigquery.jobUser) -
发现和读取 Lakehouse 目录中的表元数据:
BigLake Viewer (
roles/biglake.viewer)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
查询数据
设置联合后,您可以在 BigQuery 中使用标准 SQL 或在 Managed Service for Apache Spark 中使用 Apache Spark 来查询远程数据。
Lakehouse 会处理元数据转换和安全数据 访问,让您可以将远程 Apache Iceberg 表视为本地 环境中的表。 Google Cloud
从 BigQuery 查询
如需查询联合 Apache Iceberg 表,请使用标准 BigQuery SQL。表路径遵循 4 部分结构:project.federated_catalog.namespace.table。系统会自动处理缓存、凭据自动售卖和 CCI 传输路由。
SELECT user_id, action, COUNT(*) as total_actions FROM `PROJECT_ID.FEDERATED_CATALOG_NAME.NAMESPACE_NAME.TABLE_NAME` WHERE event_date >= '2026-04-01' GROUP BY 1, 2;
替换以下内容:
PROJECT_ID:您的 Google Cloud 项目 ID。FEDERATED_CATALOG_NAME:联合目录的名称。NAMESPACE_NAME:目录中的命名空间。TABLE_NAME:表的名称。REGION:区域。 Google Cloud 例如us-east4。
您还可以使用 bq 命令行工具运行查询:
bq --location="REGION" --project_id="PROJECT_ID" query --use_legacy_sql=false \ "SELECT * FROM \`PROJECT_ID.FEDERATED_CATALOG_NAME.NAMESPACE_NAME.TABLE_NAME\` LIMIT 10"
从 Managed Service for Apache Spark 查询
您可以直接从 Managed Service for Apache Spark 集群读取跨云 Lakehouse 数据,而无需管理单独的 AWS 凭据 或 S3 连接器。Spark 使用标准 Apache Iceberg REST Catalog 接口直接连接到 Lakehouse,而不是使用 BigQuery Storage Read API。
通过使用 Lakehouse REST 端点配置 Managed Service for Apache Spark 作业,Lakehouse 会通过 X-Iceberg-Access-Delegation=vended-credentials 自动向 Spark 提供临时的、限定范围的 S3 凭据。这样,Spark 就可以在遵循目录配置的同时安全地读取底层数据。
如需使用 Lakehouse REST 端点配置 Managed Service for Apache Spark 作业,请执行以下操作:
配置 Spark 作业。
在此命令中,请在提交 Spark 作业时传递 Apache Iceberg REST Catalog 属性。这会将联合 Lakehouse 目录映射到本地 Spark 目录名称(例如
my_catalog):gcloud dataproc jobs submit pyspark PYSPARK_SCRIPT_PATH \ --cluster="CLUSTER_NAME" \ --region="REGION" \ --properties="spark.sql.catalog.SPARK_CATALOG_NAME=org.apache.iceberg.spark.SparkCatalog,\ spark.sql.catalog.SPARK_CATALOG_NAME.type=rest,\ spark.sql.catalog.SPARK_CATALOG_NAME.uri=https://biglake.googleapis.com/iceberg/v1/restcatalog,\ spark.sql.catalog.SPARK_CATALOG_NAME.warehouse=bl://projects/PROJECT_ID/catalogs/FEDERATED_CATALOG_NAME,\ spark.sql.catalog.SPARK_CATALOG_NAME.io-impl=org.apache.iceberg.aws.s3.S3FileIO,\ spark.sql.catalog.SPARK_CATALOG_NAME.header.X-Iceberg-Access-Delegation=vended-credentials,\ spark.sql.catalog.SPARK_CATALOG_NAME.rest-metrics-reporting-enabled=false,\ spark.sql.catalog.SPARK_CATALOG_NAME.header.x-goog-user-project=PROJECT_ID"
在 PySpark 中查询数据。
此命令使用 Spark 直接从 Lakehouse 目录读取数据,然后运行标准转换。
df = spark.table("SPARK_CATALOG_NAME.NAMESPACE_NAME.TABLE_NAME") df.filter(df.action == "purchase").show()
替换以下内容:
PYSPARK_SCRIPT_PATH:PySpark 作业的路径。CLUSTER_NAME:Managed Service for Apache Spark 集群的名称。REGION:区域。 Google Cloud 例如us-east4。PROJECT_ID:您的 Google Cloud 项目 ID。SPARK_CATALOG_NAME:您要用于 Spark 目录的名称。FEDERATED_CATALOG_NAME:联合目录的名称。NAMESPACE_NAME:目录中的命名空间。TABLE_NAME:表的名称。