Acesse tabelas do Databricks a partir de clientes Delta.
Esta página descreve como usar a API REST do Unity para criar, ler e gravar em tabelas gerenciadas Unity Catalog e em tabelas externas a partir de clientes Delta externos. Para obter uma lista completa das integrações compatíveis, consulte IntegraçõesUnity Catalog.
Crie, leia e escreva usando a API REST do Unity.
Beta
A criação e a gravação de tabelas no Unity Catalog a partir de clientes Delta estão em versão Beta. O suporte externo ao cliente é limitado.
A API REST do Unity fornece aos clientes externos acesso para criar, ler e gravar tabelas registradas no Unity Catalog. Configure o acesso usando a URLworkspace como endpoint. Os seguintes tipos de tabela estão acessíveis:
Tipo de tabela | Ler | Gravar | Criar |
|---|---|---|---|
Delta | Sim | Sim* | Sim* |
Delta externo | Sim | Sim | Sim |
* Suportado para gerenciamento de tabelas Delta com confirmação de catálogo.
Requisitos
Databricks oferece suporte ao acesso API REST do Unity para tabelas como parte do Unity Catalog. Você precisa ter Unity Catalog ativado em seu workspace para usar esses endpoints.
Você também deve concluir as seguintes etapas de configuração para configurar o acesso às tabelas a partir de clientes Delta usando a API REST do Unity:
-
Ative o acesso externo a dados para sua metastore. Consulte Habilitar o acesso externo a dados no metastore.
-
Conceda ao principal que acessa os dados externamente o privilégio
EXTERNAL USE SCHEMAno esquema que contém os objetos. Consulte Conceder privilégios principais ao Unity Catalog. -
Para tabelas externas acessadas por caminho: Conceda ao principal o privilégio
EXTERNAL USE LOCATIONno local externo que contém o caminho da tabela. Consulte Conceder privilégios principais ao Unity Catalog. -
Certifique-se de que o diretor tenha os privilégios relevantes:
SELECTna mesa para leiturasMODIFYna mesa para escreverCREATEsobre o esquema para criação de tabelas- Para gravações externas em tabelas Delta gerenciadas, verifique se a tabela na qual a gravação está sendo feita tem o recurso de confirmação de catálogo ativado.
-
Autentique-se usando um dos seguintes métodos:
- access token pessoal (PAT): Consulte Autorizar acesso ao recurso Databricks.
- Autenticação OAuth máquina a máquina (M2M): Suporta refresh automática de credenciais e tokens para trabalhos Spark de longa duração (mais de 1 hora). Consulte Autorizar o acesso da entidade de serviço ao Databricks com OAuth.
Limitações
- O acesso externo a tabelas UniForm com IcebergCompatV3 não é suportado atualmente. Após escrever externamente em uma tabela UniForm , você deve executar
MSCK REPAIR TABLEno Databricks para gerar metadados Iceberg . - Alterações de esquema (por exemplo,
ALTER TABLE), atualizações de propriedades de tabela e alterações de recursos de tabela não são atualmente suportadas em tabelas gerencia de clientes externos. - Clientes externos não podem executar operações de manutenção de tabelas, como
OPTIMIZE,VACUUMeANALYZE, em tabelas Delta gerenciadas. - Clientes externos não podem criar clones superficiais.
- Clientes externos não podem criar tabelas com colunas geradas automaticamente, colunas default ou colunas de restrição.
- Ao criar tabelas externas, a Databricks recomenda o uso do Apache Spark 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.
Acesse tabelas Delta com Apache Spark usando autenticação PAT.
A seguinte configuração é necessária para ler ou gravar em tabelas gerenciadas Unity Catalog e tabelas Delta externas com Apache Spark usando autenticação PAT:
"spark.sql.extensions": "io.delta.sql.DeltaSparkSessionExtension",
"spark.sql.catalog.spark_catalog": "io.unitycatalog.spark.UCSingleCatalog",
"spark.sql.catalog.<uc-catalog-name>": "io.unitycatalog.spark.UCSingleCatalog",
"spark.sql.catalog.<uc-catalog-name>.uri": "<workspace-url>",
"spark.sql.catalog.<uc-catalog-name>.token": "<token>",
"spark.sql.defaultCatalog": "<uc-catalog-name>",
"spark.jars.packages": "io.delta:delta-spark_4.1_2.13:4.2.0,io.unitycatalog:unitycatalog-spark_2.13:0.4.1",
"spark.jars": "/path/to/gcs-connector-3.0.2-shaded.jar"
Você precisa download o arquivo JAR do conectorGCS separadamente. Atualize o caminho spark.jars para apontar para o arquivo de downloads gcs-connector-3.0.2-shaded.jar .
Substitua as seguintes variáveis:
-
<uc-catalog-name>: O nome do catálogo no Unity Catalog que contém suas tabelas. -
<token>access token pessoal (PAT) para a entidade principal que configura a integração. -
<workspace-url>: O URLworkspace Databricks . Por exemplo,cust-success.cloud.databricks.com.
As versões dos pacotes mostradas acima são as atuais até a última atualização desta página. Versões mais recentes podem estar disponíveis. Verifique se as versões dos pacotes são compatíveis com a sua versão Spark .
Para obter mais detalhes sobre como configurar Apache Spark para armazenamento de objetos cloud , consulte a documentação OSSUnity Catalog.
É necessário Databricks Runtime 16.4 ou superior para ler, gravar ou criar tabelas com o recurso de confirmação de catálogo ativado. É necessário Databricks Runtime 18.0 ou superior para habilitar ou desabilitar a confirmação de catálogo em tabelas existentes.
Para criar tabelas Delta gerenciadas com confirmação de catálogo, use o seguinte SQL:
CREATE TABLE <uc-catalog-name>.<schema-name>.<table-name> (id INT, desc STRING)
TBLPROPERTIES ('delta.feature.catalogManaged' = 'supported') USING delta;
Para criar tabelas Delta externas, utilize o seguinte SQL:
CREATE TABLE <uc-catalog-name>.<schema-name>.<table-name> (id INT, desc STRING)
USING delta
LOCATION <path>;
Acesse tabelas Delta com Apache Spark usando autenticação OAuth.
O Databricks também oferece suporte à autenticação OAuth de máquina para máquina (M2M). OAuth gerencia automaticamente os tokens e a renovação de credenciais para autenticação Unity Catalog .
A autenticação OAuth para clientes Spark externos requer:
- Unity Catalog Cliente Spark versão 0.4.1 ou posterior (
io.unitycatalog:unitycatalog-spark) - Apache Spark 4.0 ou posterior
- Delta Spark 4.2.0 ou posterior
- Uma entidade de serviço OAuth M2M com as permissões apropriadas. Consulte Autorizar o acesso da entidade de serviço ao Databricks com OAuth.
A seguinte configuração é necessária para criar, ler ou gravar em tabelas gerenciadas Unity Catalog e tabelas Delta externas com Apache Spark usando autenticação OAuth :
"spark.sql.extensions": "io.delta.sql.DeltaSparkSessionExtension",
"spark.sql.catalog.spark_catalog": "io.unitycatalog.spark.UCSingleCatalog",
"spark.sql.catalog.<uc-catalog-name>": "io.unitycatalog.spark.UCSingleCatalog",
"spark.sql.catalog.<uc-catalog-name>.uri": "<workspace-url>",
"spark.sql.catalog.<uc-catalog-name>.auth.type": "oauth",
"spark.sql.catalog.<uc-catalog-name>.auth.oauth.uri": "<oauth-token-endpoint>",
"spark.sql.catalog.<uc-catalog-name>.auth.oauth.clientId": "<oauth-client-id>",
"spark.sql.catalog.<uc-catalog-name>.auth.oauth.clientSecret": "<oauth-client-secret>",
"spark.sql.defaultCatalog": "<uc-catalog-name>",
"spark.jars.packages": "io.delta:delta-spark_4.1_2.13:4.2.0,io.unitycatalog:unitycatalog-spark_2.13:0.4.1",
"spark.jars": "/path/to/gcs-connector-3.0.2-shaded.jar"
Você precisa download o arquivo JAR do conectorGCS separadamente. Atualize o caminho spark.jars para apontar para o arquivo de downloads gcs-connector-3.0.2-shaded.jar .
Substitua as seguintes variáveis:
-
<uc-catalog-name>: O nome do catálogo no Unity Catalog que contém suas tabelas. -
<oauth-token-endpoint>URL endpoint de tokens OAuth . Para construir este URL:- Localize o ID da sua account Databricks . Consulte Localizar o ID da sua account.
- Utilize o seguinte formato:
https://accounts.cloud.databricks.com/oidc/accounts/<account-id>/v1/token
-
<oauth-client-id>ID do cliente OAuth para sua entidade de serviço. Consulte Autorizar o acesso da entidade de serviço ao Databricks com OAuth. -
<oauth-client-secret>Segredo do cliente OAuth para sua entidade de serviço. Consulte Autorizar o acesso da entidade de serviço ao Databricks com OAuth. -
<workspace-url>: O URLworkspace Databricks . Por exemplo,cust-success.cloud.databricks.com.
As versões dos pacotes mostradas acima são as atuais até a última atualização desta página. Versões mais recentes podem estar disponíveis. Verifique se as versões dos pacotes são compatíveis com a sua versão Spark .
Crie tabelas Delta usando a API.
Para criar uma tabela Delta externa usando a API REST Unity Catalog , siga estes passos:
Passo 1: Faça uma solicitação POST para a APICriar Tabela.
Utilize a seguinte solicitação 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 workspace Databricks<token>: tokens para a entidade principal que está fazendo a chamada 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 completo para os dados da tabela.
o passo 2: Inicializar 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 a localização da tabela, crie uma tabela Delta vazia usando o Spark:
O esquema utilizado neste passo deve corresponder exatamente às definições de coluna fornecidas na solicitação 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>")
A API Create Table para clientes externos possui as seguintes limitações:
-
Somente tabelas Delta externas são suportadas (
"table_type": "EXTERNAL"e"data_source_format": "DELTA"). -
Somente os seguintes campos são permitidos:
namecatalog_nameschema_nametable_typedata_source_formatcolumnsstorage_locationproperties
-
Máscaras de coluna não são suportadas.