Compartilhar via


Criar tabelas Delta externas a partir de clientes externos

Importante

Esse recurso está em Visualização Pública.

Esta página fornece informações sobre como criar tabelas externas do Unity Catalog suportadas pelo Delta Lake a partir de clientes e sistemas externos.

Observação

O Databricks recomenda usar o Apache Spark para criar tabelas externas para garantir que as definições de coluna estejam em um formato compatível com o Apache Spark. A API não valida a correção da especificação da coluna. Se a especificação não for compatível com o Apache Spark, o Databricks Runtime poderá não conseguir ler as tabelas.

Requisitos

Você pode criar tabelas externas usando o Apache Spark, a API do Catálogo do Unity ou outros clientes externos.

Criar tabelas Delta usando o Apache Spark

Veja a seguir um exemplo das configurações para configurar o Apache Spark para criar tabelas Delta externas do Catálogo do 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>",

Substitua as seguintes variáveis:

  • <uc-catalog-name>: o nome do catálogo no Unity Catalog que contém suas tabelas.
  • <workspace-url>: URL do workspace do Azure Databricks.
  • <token>: token OAuth para o principal que configura a integração.

Para que o Apache Spark e o Delta Lake trabalhem em conjunto com o Catálogo do Unity, você precisará de pelo menos Apache Spark 3.5.3 e Delta Lake 3.2.1.

Inclua as seguintes dependências ao iniciar o 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"

Agora você pode criar tabelas externas usando o SQL:

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

Criar tabelas Delta usando a API

Para criar uma tabela Delta externa usando a API REST do Catálogo do Unity, siga estas etapas:

Etapa 1: fazer uma solicitação POST para a API Criar Tabela

Use a seguinte solicitação de API para registrar os metadados da tabela no Catálogo do 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
    }
  ]
}'

Substitua as seguintes variáveis:

  • <workspace-url>: URL do workspace do Azure Databricks
  • <token>: token para o principal que está fazendo a chamada à API
  • <uc-catalog-name>: nome do catálogo no Catálogo do Unity que conterá a tabela externa
  • <schema-name>: nome do esquema dentro do catálogo em que a tabela será criada
  • <table-name>: nome da tabela externa
  • <path>: caminho totalmente qualificado para os dados da tabela

Etapa 2: Configurar a localização da tabela Delta

A chamada à API acima registra a tabela em :[UC], mas não cria os arquivos Delta no local de armazenamento. Para inicializar o local da tabela, escreva uma tabela Delta vazia usando o Spark:

O esquema usado nesta etapa deve corresponder exatamente às definições de coluna fornecidas na solicitação de 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>")

Observação

A API Criar Tabela para clientes externos tem as seguintes limitações:

  • Há suporte apenas para tabelas Delta externas ("table_type": "EXTERNAL" e "data_source_format": "DELTA").
  • Somente os seguintes campos são permitidos:
    • name
    • catalog_name
    • schema_name
    • table_type
    • data_source_format
    • columns
    • storage_location
    • properties
  • Não há suporte para máscaras de coluna.