使用無邊界 Lakehouse

Lakehouse for Apache Iceberg 支援透過無邊界 Lakehouse 設定查詢遠端資料。設定完成後,系統支援使用 BigQuery 中的標準 SQL、開放原始碼版本的 Apache Spark 或 Managed Service for Apache Spark 存取資料。除了分析查詢,您也可以使用同盟資料取得 AI 輔助洞察和進行控管:

  • 對話式數據分析: 根據確切的資料來源 (包括跨雲端資料表) 建構專用代理,透過單一對話分析不同雲端環境中的資料。
  • Dataplex Catalog: 使用 Knowledge Catalog 功能,透過聯邦資料來源進行資料剖析和深入分析。

如要取得更深入的洞察資料,您可以根據資料來源 (從專案、資料集和資料表到檢視畫面、圖表和使用者定義函式) 撰寫專用代理程式。由於資料很少儲存在單一位置,對話式分析功能可存取 BigQuery 標準資料表以外的資料,包括 Lakehouse 管理的 Apache Iceberg 資料表,以及 Databricks Unity、AWS Glue、SAP 和 Salesforce 等無邊界的 Lakehouse 來源。這項功能可讓您打破資料孤島,並在單一對話中分析跨雲端資料。

本頁說明設定無邊界 Lakehouse 後,如何查詢遠端資料。

事前準備

查詢資料前,請務必完成下列事項:

  1. AWS GlueDatabricks Unity CatalogSnowflake 設定無邊界的 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 查詢

PySpark 批次工作負載提交至 Managed Service for Apache Spark,並使用 X-Iceberg-Access-Delegation=vended-credentials 啟用憑證販售功能。Spark 會使用短期範圍限定的供應憑證安全連線至 S3,完全不需要管理個別的 AWS 憑證或 S3 連接器。

  1. 為 Managed Service for Apache Spark 啟用輸出連線。

    Managed Service for Apache Spark 無法使用預設網路設定連線至 AWS S3。您必須佈建 Cloud Router 和 Cloud NAT。

    gcloud compute routers create lakehouse-router \
      --network=NETWORK_NAME \
      --region=REGION
    
    gcloud compute routers nats create lakehouse-nat \
      --router=lakehouse-router \
      --auto-allocate-nat-external-ips \
      --nat-all-subnet-ip-ranges \
      --region=REGION

    更改下列內容:

    • NETWORK_NAME:Managed Service for Apache Spark 批次工作負載的網路 (例如 default)。
    • REGION:Managed Service for Apache Spark 批次工作負載的區域。
  2. 建立 PySpark 應用程式檔案,然後執行 PySpark 工作。

    from pyspark.sql import SparkSession
    spark = SparkSession.builder.appName("CATALOG_NAME").getOrCreate()
    
    df = spark.table("CATALOG_NAME.NAMESPACE_NAME.TABLE_NAME")
    df.show(10, truncate=False)

    將此檔案上傳至 Cloud Storage (PYSPARK_FILE)。

    gcloud dataproc batches submit pyspark PYSPARK_FILE \
        --project=PROJECT_ID \
        --region=REGION \
        --version=RUNTIME_VERSION \
        --properties="\
        spark.sql.defaultCatalog=CATALOG_NAME,\
        spark.sql.catalog.CATALOG_NAME=org.apache.iceberg.spark.SparkCatalog,\
        spark.sql.catalog.CATALOG_NAME.type=rest,\
        spark.sql.catalog.CATALOG_NAME.uri=https://biglake.googleapis.com/iceberg/v1/restcatalog,\
        spark.sql.catalog.CATALOG_NAME.warehouse=bl://projects/PROJECT_ID/catalogs/FEDERATED_CATALOG_NAME,\
        spark.sql.catalog.CATALOG_NAME.header.x-goog-user-project=PROJECT_ID,\
        spark.sql.catalog.CATALOG_NAME.rest.auth.type=org.apache.iceberg.gcp.auth.GoogleAuthManager,\
        spark.sql.catalog.CATALOG_NAME.io-impl=IO_IMPL,\
        spark.sql.catalog.CATALOG_NAME.header.X-Iceberg-Access-Delegation=vended-credentials,\
        spark.sql.catalog.CATALOG_NAME.rest-metrics-reporting-enabled=false,\
        spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions"

    更改下列內容:

    • NAMESPACE_NAME:聯合目錄中的命名空間。
    • TABLE_NAME:聯合目錄中的資料表名稱。
    • CATALOG_NAME:本機 Spark 目錄的名稱 (例如 my_catalog)。
    • PYSPARK_FILE:PySpark 應用程式檔案的 gs:// Cloud Storage 路徑。
    • REGION:Managed Service for Apache Spark 批次工作負載的區域。
    • RUNTIME_VERSION:Managed Service for Apache Spark 執行階段版本,例如 2.3
    • PROJECT_ID:使用 Apache Iceberg REST 目錄端點時,系統會向這個專案收取費用。
    • FEDERATED_CATALOG_NAME:聯合目錄的名稱。
    • IO_IMPL:與基礎儲存空間相符的 FileIO 實作項目。

    Spark 設定參數

    下表列出所有連線的常見必要參數:

    參數 說明
    spark.sql.defaultCatalog 預設目錄名稱 (例如 CATALOG_NAME)。
    spark.sql.catalog.CATALOG_NAME 目錄實作類別。設為 org.apache.iceberg.spark.SparkCatalog
    spark.sql.catalog.CATALOG_NAME.type 目錄後端類型。設為 rest,適用於 Iceberg REST 目錄。
    spark.sql.catalog.CATALOG_NAME.uri REST 目錄端點的 URI。設為 https://biglake.googleapis.com/iceberg/v1/restcatalog
    spark.sql.catalog.CATALOG_NAME.warehouse 聯合目錄的倉儲位置路徑。設為 bl://projects/PROJECT_ID/catalogs/FEDERATED_CATALOG_NAME
    spark.sql.catalog.CATALOG_NAME.header.x-goog-user-project 用於帳單和配額歸因的 Google Cloud 專案 ID。設為 PROJECT_ID
    spark.sql.extensions Iceberg SQL 語法和功能的 Spark 工作階段擴充功能。設為 org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions

    下表列出驗證參數:

    參數 說明
    spark.sql.catalog.CATALOG_NAME.rest.auth.type 自訂驗證管理員類別。設為 org.apache.iceberg.gcp.auth.GoogleAuthManager,進行 OAuth 流程驗證。
    spark.sql.catalog.CATALOG_NAME.oauth2-server-uri OAuth2 權杖伺服器端點 URI。設為 https://oauth2.googleapis.com/token,進行個人存取權杖 (PAT) 驗證。
    spark.sql.catalog.CATALOG_NAME.token Bearer 權杖或個人存取權杖 (PAT)。通常會設為 $(gcloud auth application-default print-access-token),用於 PAT 驗證。

    下表列出依據儲存空間供應商 (IO_IMPL) 的專屬參數:

    儲存空間 spark.sql.catalog.CATALOG_NAME.io-impl 附註
    Amazon S3 org.apache.iceberg.aws.s3.S3FileIO 如已啟用,則需要憑證販售 (X-Iceberg-Access-Delegation=vended-credentials)。
    其他參數:spark.sql.catalog.CATALOG_NAME.s3.region (如需區域清單,請參閱 Amazon S3 端點和配額)。
    Google Cloud Storage org.apache.iceberg.gcp.gcs.GCSFileIO 其他參數:spark.sql.catalog.CATALOG_NAME.gcs.oauth2.refresh-credentials-endpoint=https://oauth2.googleapis.com/token
    Azure Blob 儲存體 org.apache.iceberg.azure.adlsv2.ADLSFileIO 不需要額外的儲存空間參數。

    如果是 Snowflake,查詢 STRING 欄時可能會遇到問題,因為系統會自動對這些欄進行儲存空間最佳化。您可以透過下列兩種方式解決這個問題:

    • 方法 1:在 Spark 中停用向量化:將下列 Spark 設定屬性新增至 --properties 標記:
    • spark.sql.iceberg.vectorization.enabled=false
    • spark.sql.catalog.CATALOG_NAME.table-override.read.parquet.vectorization.enabled=false

    • 方法 2:在 Snowflake 中變更序列化政策:將 Snowflake 中資料表的儲存空間序列化政策變更為 COMPATIBLE

後續步驟