Pular para o conteúdo
Lucas Lessa
Voltar para as notícias
DatabricksGAImpacto: Alto

Grave em tabelas Delta gerenciadas pelo Unity Catalog usando Spark externo

Agora em GA: crie e grave dados diretamente em tabelas Delta gerenciadas no Unity Catalog a partir de clusters Apache Spark externos, usando catalog commits.

O que mudou

O suporte para criar e gravar dados em tabelas Delta gerenciadas (managed) no Unity Catalog a partir de clientes Apache Spark externos chegou à disponibilidade geral (GA). A operação é viabilizada pela Unity REST API em tabelas que possuem commits coordenados pelo catálogo.

Para que serve

Imagine que você tem uma infraestrutura própria de Apache Spark rodando fora da Databricks (por exemplo, em Kubernetes ou EMR) e precisa carregar dados diretamente nas tabelas gerenciadas do seu lakehouse corporativo sem transformá-las em tabelas externas.

Com essa novidade, você pode:

  • Inserir e anexar dados em tabelas gerenciadas diretamente do Spark externo.
  • Criar novas tabelas gerenciadas registradas no Unity Catalog a partir de jobs externos.
  • Centralizar governança e permissões no Unity Catalog mesmo processando fora da nuvem Databricks.

Como usar

Para habilitar a gravação externa, a tabela gerenciada precisa do recurso de commits de catálogo (delta.feature.catalogManaged).

Crie a tabela gerenciada via SQL no Databricks Runtime:

CREATE TABLE meu_catalogo.meu_schema.minha_tabela (id INT, desc STRING)
USING delta
TBLPROPERTIES ('delta.feature.catalogManaged' = 'supported');

O que acontece nesse código:

  1. Uma tabela Delta gerenciada é criada dentro do catálogo e schema especificados.
  2. A propriedade delta.feature.catalogManaged é definida como supported, permitindo que o catálogo coordene as gravações externas.

No seu cluster Apache Spark externo, configure a sessão com os pacotes e parâmetros necessários (usando autenticação OAuth M2M):

# Exemplo de configuração do SparkSession no Spark externo
spark_conf = {
    "spark.sql.extensions": "io.delta.sql.DeltaSparkSessionExtension",
    "spark.sql.catalog.spark_catalog": "org.apache.spark.sql.delta.catalog.DeltaCatalog",
    "spark.sql.catalog.meu_catalogo": "io.unitycatalog.spark.UCSingleCatalog",
    "spark.sql.catalog.meu_catalogo.uri": "https://meu-workspace.cloud.databricks.com",
    "spark.sql.catalog.meu_catalogo.auth.type": "oauth",
    "spark.sql.catalog.meu_catalogo.auth.oauth.uri": "https://meu-workspace.cloud.databricks.com/oidc/v1/token",
    "spark.sql.catalog.meu_catalogo.auth.oauth.clientId": "<oauth-client-id>",
    "spark.sql.catalog.meu_catalogo.auth.oauth.clientSecret": "<oauth-client-secret>",
    "spark.sql.defaultCatalog": "meu_catalogo",
    "spark.hadoop.fs.s3.impl": "org.apache.hadoop.fs.s3a.S3AFileSystem",
    "spark.jars.packages": "io.delta:delta-spark_4.1_2.13:4.3.0,io.unitycatalog:unitycatalog-spark_4.1_2.13:0.5.0,org.apache.hadoop:hadoop-aws:3.4.2"
}

O que acontece nesse código:

  1. Habilita extensões do Delta Lake e define o catálogo do Unity Catalog como o catálogo Spark.
  2. Aponta a URL da Unity REST API para a URL do seu workspace Databricks.
  3. Configura a autenticação de máquina para máquina (OAuth M2M) para renovar credenciais automaticamente em jobs longos.

Limitações e requisitos

  • Estágio: Geralmente disponível (GA) para Apache Spark. Flink, DuckDB, StreamNative e Starburst continuam em Beta.
  • Versões mínimas: Apache Spark 4.0 ou 4.1, Delta Spark 4.3.0 ou superior e cliente Unity Catalog Spark 0.5.0 ou superior.
  • Databricks Runtime: DBR 16.4+ para criar ou gravar em tabelas com catalog commits; DBR 18.0+ para habilitar o recurso em tabelas já existentes.
  • Permissões: O acesso externo precisa estar habilitado no metastore. A entidade que roda o job precisa de EXTERNAL USE SCHEMA no schema, SELECT e MODIFY na tabela (ou CREATE para novas tabelas).
  • Restrições: Clientes externos não podem executar comandos de manutenção (OPTIMIZE, VACUUM, ANALYZE), renomear colunas, alterar propriedades internas (delta.* ou databricks.*), adicionar constraints nem usar tabelas com compatibilidade Iceberg (IcebergCompatV3).
  • Concorrência: Evite modificar a mesma tabela armazenada no S3 a partir de múltiplos clientes de escrita distintos simultaneamente para evitar inconsistências.

Como aplicar num pipeline

Em pipelines híbridos, você pode usar um cluster Spark externo para ingerir e limpar dados em uma camada Bronze ou Silver gerenciada pelo Unity Catalog, deixando o Databricks SQL ou workflows nativos encarregados apenas das agregações finais na camada Gold e da governança.

Ver nota oficial do Databricks

External writes to managed Delta tables are now generally available

Resumo e explicação gerados por IA a partir da release note oficial. Em caso de dúvida, a documentação oficial da plataforma prevalece.

Relacionadas