從 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 數據表的存取權:
- 為中繼存放區啟用 外部數據存取。 請參閱 在中繼存放區上啟用外部數據存取。
- 給負責設定整合的主體在包含數據表的架構上授予
EXTERNAL USE SCHEMA
特權。 請參閱 授與主體 EXTERNAL USE SCHEMA。 - 使用 Databricks 個人存取令牌進行驗證。 請參閱 授權存取 Azure 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>
- AWS:
使用 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小時。 為了獲得更好的效能,請讓用戶端快取現有認證,直到認證到期前再請求新的認證。