Lakehouse for Apache Iceberg 支援透過跨雲端 Lakehouse 設定查詢遠端資料。設定完成後,系統支援在 BigQuery 中使用標準 SQL 存取資料,或在 Managed Service for Apache Spark 中使用 Apache Spark 存取資料。
本頁說明設定跨雲端 Lakehouse 後,如何查詢遠端資料。
事前準備
查詢資料前,請務必完成下列事項:
- 為 AWS Glue 或 Databricks Unity 目錄設定跨雲端 Lakehouse。
- 確認遠端目錄中含有資料。
必要的角色
如要取得查詢聯邦資料所需的權限,請要求管理員授予您專案的下列 IAM 角色:
-
在 BigQuery 中查詢資料:
BigQuery 資料檢視者 (
roles/bigquery.dataViewer) -
執行 BigQuery 工作:
BigQuery 工作使用者 (
roles/bigquery.jobUser) -
在 Lakehouse 目錄中探索及讀取資料表中繼資料:
BigLake 檢視者 (
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 目錄介面直接連線至 Lakehouse,而不是使用 BigQuery Storage Read API。
使用 Lakehouse REST 端點設定 Managed Service for Apache Spark 工作後,Lakehouse 會透過 X-Iceberg-Access-Delegation=vended-credentials 自動提供暫時性的 S3 範圍憑證給 Spark。這樣一來,Spark 就能安全地讀取基礎資料,同時遵守目錄的設定。
如要使用 Lakehouse REST 端點設定 Managed Service for Apache Spark 工作,請按照下列步驟操作:
設定 Spark 工作。
在這個指令中,提交 Spark 工作時請傳遞 Apache Iceberg REST 目錄屬性。這會將聯合 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:資料表名稱。