共用方式為


從外部用戶端建立外部差異數據表

這很重要

這項功能目前處於 公開預覽版

此頁面提供如何從外部客戶端和系統建立 Delta Lake 所支援的 Unity 目錄外部資料表的相關信息。

備註

Databricks 建議使用 Apache Spark 來建立外部數據表,以確保數據行定義的格式與 Apache Spark 相容。 API 不會驗證資料行規格的正確性。 如果規格與 Apache Spark 不相容,則 Databricks Runtime 可能無法讀取數據表。

需求

您可以使用 Apache Spark、Unity 目錄 API 或其他外部用戶端來建立外部資料表。

使用 Apache Spark 建立 Delta 數據表

以下是設定 Apache Spark 以建立 Unity 目錄外部 Delta 數據表的設定範例:

"spark.sql.extensions": "io.delta.sql.DeltaSparkSessionExtension",
"spark.sql.catalog.spark_catalog": "io.unitycatalog.spark.UCSingleCatalog",
"spark.hadoop.fs.s3.impl": "org.apache.hadoop.fs.s3a.S3AFileSystem",
"spark.sql.catalog.<uc-catalog-name>": "io.unitycatalog.spark.UCSingleCatalog",
"spark.sql.catalog.<uc-catalog-name>.uri": "<workspace-url>/api/2.1/unity-catalog",
"spark.sql.catalog.<uc-catalog-name>.token": "<token>",
"spark.sql.defaultCatalog": "<uc-catalog-name>",

替代下列變數:

  • <uc-catalog-name>:Unity Catalog 中包含您資料表的目錄名稱。
  • <workspace-url>:Azure Databricks 工作區的URL。
  • <token>:設定整合之主體的OAuth權杖。

若要讓 Apache Spark 和 Delta Lake 與 Unity 目錄搭配運作,您至少需要 Apache Spark 3.5.3 和 Delta Lake 3.2.1。

啟動 Apache Spark 時包含下列相依性:

--packages "org.apache.hadoop:hadoop-aws:3.3.4,\
io.delta:delta-spark_2.12:3.2.1,\
io.unitycatalog:unitycatalog-spark_2.12:0.2.0"

現在您可以使用 SQL 建立外部資料表:

CREATE TABLE <uc-catalog-name>.<schema-name>.<table-name> (id INT, desc STRING)
USING delta
LOCATION <path>;

使用 API 建立差異數據表

若要使用 Unity 目錄 REST API 建立外部 Delta 數據表,請遵循下列步驟:

步驟 1:對建立數據表 API 提出 POST 要求

使用下列 API 要求在 Unity 目錄中註冊資料表元資料:

curl --location --request POST 'https://<workspace-url>/api/2.0/unity-catalog/tables/' \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
  "name": "<table-name>",
  "catalog_name": "<uc-catalog-name>",
  "schema_name": "<schema-name>",
  "table_type": "EXTERNAL",
  "data_source_format": "DELTA",
  "storage_location": "<path>",
  "columns": [
    {
      "name": "id",
      "type_name": "LONG",
      "type_text": "bigint",
      "type_json": "\"long\"",
      "type_precision": 0,
      "type_scale": 0,
      "position": 0,
      "nullable": true
    },
    {
      "name": "name",
      "type_name": "STRING",
      "type_text": "string",
      "type_json": "\"string\"",
      "type_precision": 0,
      "type_scale": 0,
      "position": 1,
      "nullable": true
    }
  ]
}'

替代下列變數:

  • <workspace-url>:Azure Databricks 工作區的 URL
  • <token>:進行 API 呼叫之主體的令牌
  • <uc-catalog-name>:Unity 目錄中將包含外部資料表的目錄名稱
  • <schema-name>:目錄內將建立數據表的架構名稱
  • <table-name>:外部數據表的名稱
  • <path>:數據表數據的完整路徑

步驟 2:初始化 Delta 數據表位置

上述 API 呼叫會在 :[UC] 中註冊數據表,但不會在儲存位置建立 Delta 檔案。 若要初始化數據表位置,請使用 Spark 撰寫空的 Delta 數據表:

此步驟中使用的架構必須完全符合 API 要求中提供的數據行定義。


from pyspark.sql.types import StructType, StructField, StringType, LongType

# Define schema matching your API call
schema = StructType([
    StructField("id", LongType(), True),
    StructField("name", StringType(), True)
])

# Create an empty DataFrame and initialize the Delta table
empty_df = spark.createDataFrame([], schema)
empty_df.write \
    .format("delta") \
    .mode("overwrite") \
    .save("<path>")

備註

針對外部用戶端建立資料表 API 有下列限制:

  • 僅支援外部差異資料表 ("table_type": "EXTERNAL""data_source_format": "DELTA")。
  • 只允許下列欄位:
    • name
    • catalog_name
    • schema_name
    • table_type
    • data_source_format
    • columns
    • storage_location
    • properties
  • 不支援數據行遮罩。