使用 Apache Spark 读取 Apache Iceberg 受管表

以下部分介绍了如何使用 Apache Spark 读取 Apache Iceberg 受管表(以下简称“Iceberg 受管表”)。

准备工作

所需的角色

如需获得让 BigQuery 管理项目中的表所需的权限,请让您的管理员为您授予以下 IAM 角色:

  • 如需查询数据,请授予以下角色:
  • 向连接服务帐号授予以下角色,以便其能够在 Cloud Storage 中读取和写入数据:

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

这些预定义角色可提供让 BigQuery 管理项目中的表所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

让 BigQuery 管理项目中的表需要以下权限:

  • 针对您的项目的 bigquery.connections.delegate 权限
  • 针对您的项目的 bigquery.jobs.create 权限
  • 针对您的项目的 bigquery.readsessions.create 权限
  • 针对您的项目的 bigquery.tables.get 权限
  • 针对您的项目的 bigquery.tables.getData 权限
  • 针对存储桶的 storage.buckets.get 权限
  • 针对存储桶的 storage.objects.create 权限
  • 针对存储桶的 storage.objects.delete 权限
  • 针对存储桶的 storage.objects.get 权限
  • 针对存储桶的 storage.objects.list 权限

您也可以使用自定义角色或其他预定义角色来获取这些权限。

使用 Apache Spark 读取 Iceberg 受管表

以下示例会将您的环境设置为搭配使用 Spark SQL 与 Apache Iceberg,然后执行查询以从指定的 Iceberg 受管表中提取数据。

spark-sql \
  --packages org.apache.iceberg:iceberg-spark-runtime-ICEBERG_VERSION_NUMBER \
  --conf spark.sql.catalog.CATALOG_NAME=org.apache.iceberg.spark.SparkCatalog \
  --conf spark.sql.catalog.CATALOG_NAME.type=hadoop \
  --conf spark.sql.catalog.CATALOG_NAME.warehouse='BUCKET_PATH' \

# Query the table
SELECT * FROM CATALOG_NAME.FOLDER_NAME;

替换以下内容:

  • ICEBERG_VERSION_NUMBER:Apache Spark Iceberg 运行时的当前版本。从 Spark 版本下载最新版本。
  • CATALOG_NAME:用于引用 Iceberg 受管表的目录。
  • BUCKET_PATH:包含 表文件的存储桶的路径。例如 gs://mybucket/。
  • FOLDER_NAME:包含表文件的文件夹。 例如 myfolder。

后续步骤