共用方式為


從 Iceberg 用戶端讀取 Databricks 數據表

使用 Iceberg REST 目錄,從支援的 Iceberg 用戶端讀取 Azure Databricks 上的 Unity 目錄註冊數據表,包括 Apache Spark、Apache Flink、Trino 和 Snowflake。

使用 Unity 目錄 Iceberg 目錄端點讀取

Unity Catalog 針對已啟用 Iceberg 讀取功能的資料表,提供 Iceberg REST 目錄 API 的唯讀實現。

使用端點 /api/2.1/unity-catalog/iceberg設定存取。 如需使用此 REST API 的詳細資訊,請參閱 Iceberg REST API 規格

注意

Azure Databricks 已為某些 Iceberg 資料讀取客戶端引入認證發放功能。 Databricks 建議使用憑證管理來控制存取供支援系統使用的雲端儲存位置。 如需外部系統存取,請參閱 Unity 目錄憑證發放

如果您的用戶端不支援認證販賣,您必須設定從用戶端存取雲端儲存位置,其中包含已啟用 Iceberg 讀取 (UniForm) 之 Delta 數據表的檔案和元數據。 如需配置細節,請參閱 Iceberg 閱讀器客戶端的文件。

要求

Azure Databricks 支援 Iceberg REST 目錄存取數據表作為 Unity 目錄的一部分。 您必須在工作區中啟用 Unity 目錄,才能使用這些端點。 下表類型符合 Iceberg REST 目錄讀取的資格:

  • 已啟用 Iceberg 讀取 (UniForm) 的 Unity 目錄受控數據表。
  • 已啟用 Iceberg 讀取功能(UniForm)的 Unity Catalog 外部表,存儲在 Delta Lake 中。

請參閱 使用 Iceberg 用戶端讀取 Delta 數據表。

您必須完成下列設定步驟,才能使用 Iceberg REST 目錄,設定從 Iceberg 用戶端讀取 Databricks 數據表的存取權:

使用 Apache Spark 讀取 Iceberg 數據表

以下是將 Apache Spark 設定為將 Azure Databricks 數據表讀取為 Iceberg 的設定範例:

"spark.sql.extensions": "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions",

# Configuration for accessing Uniform tables in Unity Catalog
"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": "<workspace-url>/api/2.1/unity-catalog/iceberg",
"spark.sql.catalog.<spark-catalog-name>.token":"<token>",
"spark.sql.catalog.<spark-catalog-name>.warehouse":"<uc-catalog-name>"

替代下列變數:

  • <uc-catalog-name>:Unity Catalog 中包含您資料表的目錄名稱。
  • <spark-catalog-name>:您想要在Spark工作階段中指定給目錄的名稱。
  • <workspace-url>:Azure Databricks 工作區的URL。
  • <token>:用於配置整合的主要人員的 PAT 令牌。

透過這些設定,您可以在 Apache Spark 中使用標識碼 <catalog-name>.<schema-name>.<table-name>將 Azure Databricks 資料表查詢為 Iceberg 格式。 若要跨多個目錄存取資料表,您必須個別設定每個目錄。

當您使用 Spark 組態查詢 Unity 目錄中的數據表時,請記住下列事項:

  • 只有在您執行 "spark.sql.extensions": "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions"時,才需要

  • Azure Databricks 會針對所有數據表使用雲端物件記憶體。 您必須將雲端專用的 Iceberg 套件 JAR 新增為 Spark 套件:

    • AWS:org.apache.iceberg:iceberg-aws-bundle:<iceberg-version>
    • Azure:org.apache.iceberg:iceberg-azure-bundle:<iceberg-version>
    • GCP:org.apache.iceberg:iceberg-gcp-bundle:<iceberg-version>

    如需詳細資訊,請參閱 Iceberg AWS 與 Spark 整合的文件

使用 Snowflake 讀取 Databricks 數據表

以下是建議的組態設定範例,可讓 Snowflake 將 Azure Databricks 數據表讀取為 Iceberg:

CREATE OR REPLACE CATALOG INTEGRATION <catalog-integration-name>
  CATALOG_SOURCE = ICEBERG_REST
  TABLE_FORMAT = ICEBERG
  CATALOG_NAMESPACE = '<uc-schema-name>'
  REST_CONFIG = (
    CATALOG_URI = '<workspace-url>/api/2.1/unity-catalog/iceberg',
    WAREHOUSE = '<uc-catalog-name>'
  )
  REST_AUTHENTICATION = (
    TYPE = BEARER
    BEARER_TOKEN = '<token>'
  )
  ENABLED = TRUE;

取代下列變數:

  • <catalog-integration-name>:您想要將註冊的目錄指派給 Snowflake 的名稱。
  • <uc-schema-name>:您需要存取之 Unity 目錄中的架構名稱。
  • <uc-catalog-name>:您需要存取的 Unity 目錄中目錄名稱。
  • <workspace-url>:Azure Databricks 工作區的URL。
  • <token>:用於配置整合的主要人員的 PAT 令牌。

REST API curl 範例

您也可以使用 REST API 呼叫,例如此 curl 範例中的 REST API 呼叫來載入資料表:

curl -X GET -H "Authentication: Bearer $OAUTH_TOKEN" -H "Accept: application/json" \
https://<workspace-instance>/api/2.1/unity-catalog/iceberg/v1/catalogs/<uc_catalog_name>/namespaces/<uc_schema_name>/tables/<uc_table_name>

然後,您應該會收到如下的回應:

{
  "metadata-location": "abfss://my-container@my-storage-account.dfs.core.windows.net/path/to/iceberg/table/metadata/file",
  "metadata": <iceberg-table-metadata-json>,
  "config": {
    "expires-at-ms": "<epoch-ts-in-millis>",
    "adls.sas-token.<storage-account-name>.dfs.core.windows.net": "<temporary-sas-token>"
  }
}

注意

回應中的 [expires-at-ms] 字段表示認證到期時間,且預設到期時間為1小時。 為了獲得更好的效能,請讓用戶端快取現有認證,直到認證到期前再請求新的認證。