使用 Apache Spark 讀取 Apache Iceberg 代管資料表

以下章節說明如何使用 Apache Iceberg 受管理資料表 (以下簡稱「Iceberg 受管理資料表」) 和 Apache Spark,讀取受管理資料表。

事前準備

  • 請參閱 BigLake 資料表總覽,瞭解不同類型的 BigLake 資料表,以及使用這些資料表會造成的影響。

  • 使用 Apache Spark 讀取 Iceberg 代管資料表前,請務必先設定雲端資源連線至儲存空間 bucket。連線必須具備儲存空間 bucket 的寫入權限,如「必要角色」一節所述。如要進一步瞭解連線所需的角色和權限,請參閱「管理連線」。

必要的角色

如要取得讓 BigQuery 管理專案中資料表所需的權限,請要求管理員授予您下列 IAM 角色:

  • 如要查詢資料,請按照下列步驟操作:
  • 將下列角色授予連線服務帳戶,以便讀取及寫入 Cloud Storage 中的資料:
    • Storage 物件使用者 (roles/storage.objectUser) (針對值區)
    • 值區的「Storage 舊版值區讀取者」 (roles/storage.legacyBucketReader)

如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。

這些預先定義的角色具備讓 BigQuery 管理專案中資料表所需的權限。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:

所需權限

如要讓 BigQuery 管理專案中的資料表,您必須具備下列權限:

  • bigquery.connections.delegate 專案
  • bigquery.jobs.create 專案
  • bigquery.readsessions.create 專案
  • bigquery.tables.get 專案
  • bigquery.tables.getData 專案
  • storage.buckets.get 在 bucket 上
  • storage.objects.create 在 bucket 上
  • storage.objects.delete 在 bucket 上
  • storage.objects.get 在 bucket 上
  • storage.objects.list 在 bucket 上

您或許還可透過自訂角色或其他預先定義的角色取得這些權限。

使用 Apache Spark 讀取 Iceberg 受管理資料表

下列範例會設定環境,以便搭配 Apache Iceberg 使用 Spark SQL,然後執行查詢,從指定的 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 Releases」下載最新版本。
  • CATALOG_NAME:用於參照 Iceberg 代管資料表的目錄。
  • BUCKET_PATH:包含資料表檔案的 bucket 路徑。例如:gs://mybucket/。
  • FOLDER_NAME:包含資料表檔案的資料夾。 例如:myfolder。

後續步驟