Condividi tramite


Creare tabelle Delta esterne da client esterni

Importante

Questa funzionalità è in Anteprima Pubblica.

Questa pagina fornisce informazioni su come creare tabelle esterne del catalogo Unity supportate da Delta Lake da client e sistemi esterni.

Annotazioni

Databricks consiglia di usare Apache Spark per creare tabelle esterne per garantire che le definizioni di colonna siano in un formato compatibile con Apache Spark. L'API non convalida la correttezza della specifica della colonna. Se la specifica non è compatibile con Apache Spark, Databricks Runtime potrebbe non essere in grado di leggere le tabelle.

Requisiti

È possibile creare tabelle esterne usando Apache Spark, l'API del catalogo Unity o altri client esterni.

Creare tabelle Delta con Apache Spark

Di seguito è riportato un esempio delle impostazioni per configurare Apache Spark per creare tabelle Delta esterne del catalogo 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>",

Sostituire le variabili seguenti:

  • <uc-catalog-name>: nome del catalogo in Unity Catalog che contiene le tabelle.
  • <workspace-url>: URL dell'area di lavoro di Azure Databricks.
  • <token>: token OAuth dell'entità principale che configura l'integrazione.

Affinché Apache Spark e Delta Lake funzionino insieme al catalogo unity, è necessario almeno Apache Spark 3.5.3 e Delta Lake 3.2.1.

Includere le dipendenze seguenti all'avvio di 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"

È ora possibile creare tabelle esterne usando SQL:

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

Creare tabelle Delta usando l'API

Per creare una tabella Delta esterna usando l'API REST del catalogo Unity, seguire questa procedura:

Passaggio 1: Effettuare una richiesta POST all'API Crea tabella

Usare la richiesta API seguente per registrare i metadati della tabella nel catalogo 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
    }
  ]
}'

Sostituire le variabili seguenti:

  • <workspace-url>: URL dell'area di lavoro di Azure Databricks
  • <token>: token per l'entità che effettua la chiamata API
  • <uc-catalog-name>: nome del catalogo in Unity Catalog che conterrà la tabella esterna
  • <schema-name>: nome dello schema all'interno del catalogo in cui verrà creata la tabella
  • <table-name>: nome della tabella esterna
  • <path>: percorso completo dei dati della tabella

Passaggio 2: Inizializzare la posizione della tabella Delta

La chiamata API precedente registra la tabella in :[UC], ma non crea i file Delta nel percorso di archiviazione. Per inizializzare il percorso della tabella, scrivere una tabella Delta vuota usando Spark:

Lo schema usato in questo passaggio deve corrispondere esattamente alle definizioni di colonna fornite nella richiesta 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>")

Annotazioni

L'API Crea tabella per i client esterni presenta le limitazioni seguenti:

  • Sono supportate solo le tabelle Delta esterne ("table_type": "EXTERNAL" e "data_source_format": "DELTA").
  • Sono consentiti solo i campi seguenti:
    • name
    • catalog_name
    • schema_name
    • table_type
    • data_source_format
    • columns
    • storage_location
    • properties
  • Le maschere di colonna non sono supportate.