使用跨云数据湖仓一体

Lakehouse for Apache Iceberg 支持通过跨云 Lakehouse 配置查询远程数据。配置完成后,系统支持在 BigQuery 中使用标准 SQL 或在 Managed Service for Apache Spark 中使用 Apache Spark 来访问数据。

本页介绍了在设置跨云 Lakehouse 后如何查询远程数据。

准备工作

您必须先完成以下操作,然后才能查询数据:

  1. AWS GlueDatabricks Unity Catalog 设置跨云 Lakehouse。
  2. 确保远程目录中有数据。

所需角色

如需获得查询联合数据所需的权限,请让管理员向您授予项目的以下 IAM 角色:

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

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

查询数据

设置联合后,您可以在 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 作业,请执行以下操作:

  1. 配置 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"
  2. 在 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:表的名称。

后续步骤