使用 Apache Spark 读取 Apache Iceberg 受管表
以下部分介绍了如何使用 Apache Spark 读取 Apache Iceberg 受管表(以下简称“Iceberg 受管表”)。
准备工作
了解不同类型的 BigLake 表以及使用这些表的影响,请参阅 BigLake 表 概览。
在使用 Apache Spark 读取 Iceberg 受管表之前,请确保您已设置与存储桶的 Cloud 资源连接。您的连接需要具有对存储桶的写入权限,如 以下所需角色部分中所述。如需详细了解连接所需的角色和权限,请参阅 管理连接。
所需的角色
如需获得让 BigQuery 管理项目中的表所需的权限,请让您的管理员为您授予以下 IAM 角色:
-
如需查询数据,请授予以下角色:
- BigQuery Data Viewer (
roles/bigquery.dataViewer) 针对项目的 - BigQuery User (
roles/bigquery.user) 针对项目的
- BigQuery Data Viewer (
-
向连接服务帐号授予以下角色,以便其能够在 Cloud Storage 中读取和写入数据:
- 针对存储桶的 Storage Object User (
roles/storage.objectUser) - 针对存储桶的 Storage Legacy Bucket Reader (
roles/storage.legacyBucketReader)
- 针对存储桶的 Storage Object User (
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
这些预定义角色可提供让 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。