Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Esta página fornece informações sobre como criar tabelas externas do Unity Catalog apoiadas pelo Delta Lake a partir de clientes e sistemas externos.
Observação
O Databricks recomenda o uso do 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 exatidão da especificação da coluna. Se a especificação não for compatível com o Apache Spark, o Databricks Runtime pode não conseguir ler as tabelas.
Requerimentos
Habilite acesso a dados externos para o seu metastore. Consulte Ativar o acesso a dados externos no metastore.
Conceda ao principal que configura a integração os seguintes privilégios
-
EXTERNAL USE SCHEMAprivilégio no esquema que contém os objetos. -
EXTERNAL USE LOCATIONprivilégio no local externo que contém o caminho. Consulte Conceder privilégios principais ao Catálogo Unity. -
CREATE TABLEpermissão na tabela,CREATE EXTERNAL TABLEno local externo,USE CATALOGno catálogo pai eUSE SCHEMAno esquema pai.
-
Você pode criar tabelas externas usando o Apache Spark, a API do Unity Catalog ou outros clientes externos.
Criar tabelas Delta usando o Apache Spark
A seguir está um exemplo das configurações para configurar o Apache Spark para criar tabelas Delta externas do Unity Catalog:
"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 espaço de trabalho do Azure Databricks. -
<token>: token OAuth para a entidade principal que configura a integração.
Para que o Apache Spark e o Delta Lake funcionem em conjunto com o Unity Catalog, você precisará de pelo menos o Apache Spark 3.5.3 e o 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 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 Unity Catalog, 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 Unity Catalog:
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 espaço de trabalho do Azure Databricks -
<token>: Token para a entidade de segurança que faz a chamada de API -
<uc-catalog-name>: Nome do catálogo no Unity Catalog que conterá a tabela externa -
<schema-name>: Nome do esquema dentro do catálogo onde a tabela será criada -
<table-name>: Nome da tabela externa -
<path>: Caminho totalmente qualificado para os dados da tabela
Etapa 2: Inicializar o local da tabela Delta
A chamada de 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 Create Table para clientes externos tem as seguintes limitações:
- Somente tabelas Delta externas são suportadas (
"table_type": "EXTERNAL"e"data_source_format": "DELTA"). - Apenas são permitidos os seguintes campos:
namecatalog_nameschema_nametable_typedata_source_formatcolumnsstorage_locationproperties
- Não há suporte para máscaras de coluna.