Freigeben über


Erstellen externer Delta-Tabellen von externen Clients

Von Bedeutung

Dieses Feature befindet sich in der Public Preview.

Diese Seite enthält Informationen zum Erstellen externer Tabellen im Unity-Katalog, die von Delta Lake von externen Clients und Systemen unterstützt werden.

Hinweis

Databricks empfiehlt die Verwendung von Apache Spark zum Erstellen externer Tabellen, um sicherzustellen, dass Spaltendefinitionen in einem Format vorliegen, das mit Apache Spark kompatibel ist. Die API überprüft nicht die Richtigkeit der Spaltenspezifikation. Wenn die Spezifikation nicht mit Apache Spark kompatibel ist, kann Databricks Runtime die Tabellen möglicherweise nicht lesen.

Anforderungen

Sie können externe Tabellen mit Apache Spark, der Unity-Katalog-API oder anderen externen Clients erstellen.

Erstellen von Delta-Tabellen mit Apache Spark

Im Folgenden finden Sie ein Beispiel für die Einstellungen zum Konfigurieren von Apache Spark zum Erstellen externer Delta-Tabellen im Unity-Katalog:

"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>",

Ersetzen Sie die folgenden Variablen:

  • <uc-catalog-name>: Der Name des Katalogs im Unity-Katalog, der Ihre Tabellen enthält.
  • <workspace-url>: URL des Azure Databricks-Arbeitsbereichs.
  • <token>: OAuth-Token für den Prinzipal, der die Integration konfiguriert.

Damit Apache Spark und Delta Lake mit Unity Catalog zusammenarbeiten können, benötigen Sie mindestens Apache Spark 3.5.3 und Delta Lake 3.2.1.

Schließen Sie beim Starten von Apache Spark die folgenden Abhängigkeiten ein:

--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"

Jetzt können Sie externe Tabellen mit SQL erstellen:

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

Erstellen von Delta-Tabellen mithilfe der API

Führen Sie die folgenden Schritte aus, um eine externe Delta-Tabelle mit der Unity Catalog-REST-API zu erstellen:

Schritt 1: Erstellen einer POST-Anforderung an die Create Table-API

Verwenden Sie die folgende API-Anforderung, um die Tabellenmetadaten im Unity-Katalog zu registrieren:

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
    }
  ]
}'

Ersetzen Sie die folgenden Variablen:

  • <workspace-url>: URL des Azure Databricks-Arbeitsbereichs
  • <token>: Token für den Prinzipal, der den API-Aufruf vornimmt
  • <uc-catalog-name>: Name des Katalogs im Unity-Katalog, der die externe Tabelle enthält
  • <schema-name>: Name des Schemas innerhalb des Katalogs, in dem die Tabelle erstellt wird
  • <table-name>: Name der externen Tabelle
  • <path>: Vollqualifizierter Pfad zu den Tabellendaten

Schritt 2: Initialisieren der Delta-Tabellenposition

Der obige API-Aufruf registriert die Tabelle in :[UC], erstellt aber nicht die Delta-Dateien am Speicherort. Um die Tabellenposition zu initialisieren, schreiben Sie eine leere Delta-Tabelle mit Spark:

Das in diesem Schritt verwendete Schema muss genau mit den Spaltendefinitionen übereinstimmen, die in der API-Anforderung bereitgestellt werden.


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>")

Hinweis

Die Create Table API für externe Clients hat die folgenden Einschränkungen:

  • Nur externe Delta-Tabellen werden unterstützt ("table_type": "EXTERNAL" und "data_source_format": "DELTA").
  • Es sind nur die folgenden Felder zulässig:
    • name
    • catalog_name
    • schema_name
    • table_type
    • data_source_format
    • columns
    • storage_location
    • properties
  • Spaltenformate werden nicht unterstützt.