Sdílet prostřednictvím


Vytvoření externích tabulek Delta z externích klientů

Důležité

Tato funkce je ve verzi Public Preview.

Tato stránka obsahuje informace o tom, jak vytvořit externí tabulky Katalogu Unity, které jsou podporovány službou Delta Lake z externích klientů a systémů.

Poznámka:

Databricks doporučuje používat Apache Spark k vytváření externích tabulek, aby se zajistilo, že definice sloupců jsou ve formátu kompatibilním s Apache Sparkem. Rozhraní API neověřuje správnost specifikace sloupce. Pokud specifikace není kompatibilní s Apache Sparkem, nemusí databricks Runtime číst tabulky.

Požadavky

Externí tabulky můžete vytvářet pomocí Apache Sparku, rozhraní API katalogu Unity nebo jiných externích klientů.

Vytváření tabulek Delta pomocí Apache Sparku

Následuje příklad nastavení pro konfiguraci Apache Sparku pro vytvoření externích tabulek Delta katalogu Unity:

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

Nahraďte následující proměnné:

  • <uc-catalog-name>: Název katalogu Unity, který obsahuje tabulky.
  • <workspace-url>: Adresa URL pracovního prostoru Azure Databricks.
  • <token>: Token OAuth pro instanční objekt, který konfiguruje integraci.

Aby Apache Spark a Delta Lake spolupracovaly s katalogem Unity, budete potřebovat alespoň Apache Spark 3.5.3 a Delta Lake 3.2.1.

Při spouštění Apache Sparku zahrňte následující závislosti:

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

Teď můžete vytvářet externí tabulky pomocí SQL:

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

Vytvoření tabulek Delta pomocí rozhraní API

Pokud chcete vytvořit externí tabulku Delta pomocí rozhraní REST API katalogu Unity, postupujte takto:

Krok 1: Vytvoření požadavku POST do rozhraní API pro vytvoření tabulky

Pomocí následujícího požadavku rozhraní API zaregistrujte metadata tabulky v katalogu 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
    }
  ]
}'

Nahraďte následující proměnné:

  • <workspace-url>: Adresa URL pracovního prostoru Azure Databricks
  • <token>: Token pro subjekt, který volá rozhraní API
  • <uc-catalog-name>: Název katalogu v katalogu Unity, který bude obsahovat externí tabulku
  • <schema-name>: Název schématu v katalogu, ve kterém se vytvoří tabulka
  • <table-name>: Název externí tabulky
  • <path>: Plně kvalifikovaná cesta k datům tabulky

Krok 2: Inicializace umístění tabulky Delta

Výše uvedená volání rozhraní API zaregistruje tabulku v :[UC], ale nevytvoří soubory Delta v umístění úložiště. Pokud chcete inicializovat umístění tabulky, napište prázdnou tabulku Delta pomocí Sparku:

Schéma použité v tomto kroku musí přesně odpovídat definicům sloupců zadaným v požadavku rozhraní 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>")

Poznámka:

Rozhraní API pro vytvoření tabulky pro externí klienty má následující omezení:

  • Podporují se pouze externí tabulky Delta ("table_type": "EXTERNAL" a "data_source_format": "DELTA").
  • Jsou povolena pouze následující pole:
    • name
    • catalog_name
    • schema_name
    • table_type
    • data_source_format
    • columns
    • storage_location
    • properties
  • Masky sloupců nejsou podporovány.