Pular para o conteúdo principal

Adaptador Databricks

contractforge-databricks é o primeiro adaptador ContractForge completo. Depende do contractforge-core e mantém o código específico do Databricks fora do núcleo semântico.

Instalar​

pip install contractforge-core contractforge-databricks

No Databricks, instale ambas as rodas no trabalho, cluster, ambiente de notebook ou caminho do espaço de trabalho. Não instale Spark no núcleo; O tempo de execução Databricks fornece Spark e Delta.

Public entry points​

from contractforge_databricks import (
deploy_databricks_project,
render_databricks_contract,
ingest_databricks_bundle,
)

Use render_databricks_contract para produzir artefatos nativos e revisar a saída. Use ingest_databricks_bundle quando o espaço de trabalho Databricks precisar executar o contrato diretamente. Use deploy_databricks_project ou CLI quando um projeto de repositório já contém um pacote de ativos Databricks e deve ser validado, implantado e opcionalmente, execute por meio da implantação nativa Databricks.

Capacidades nativas​

ContractForge areaDatabricks implementation
TablesTabelas Delta em Unity Catalog ou metastore configurado.
Incremental filesCarregador automático / cloudFiles e streaming disponível agora quando configurado.
WritesDelta modos de anexação, substituição, mesclagem/upsert, hash-diff de estado atual, histórico e exclusão reversível de instantâneo.
Tratamento customizadoNotebook Databricks como pre-task no Asset Bundle, seguido por validacao, escrita e evidencia pelo ContractForge.
GovernançaComentários Unity Catalog, tags, concessões, filtros de linha e máscaras de coluna quando suportados.
EvidênciaTabelas de controle Delta seguindo o modelo de evidência principal.
RenderingRelatórios de planejamento SQL, Python, Databricks Asset Bundles, Lakeflow e revisão de Markdown.
Tempo de execuçãoJobs Databricks, notebooks, clusters serverless ou clássicos dependendo da configuração do ambiente.

Extensões de adaptador​

As configurações específicas da plataforma estão sob extensions.databricks ou no contrato de ambiente. Eles não se tornam campos centrais de nível superior.

extensions:
databricks:
delta_properties:
delta.enableChangeDataFeed: "true"
cluster_columns: [customer_id]
partition_columns: [ingestion_date]

Use extensões de adaptador apenas para comportamento Databricks. Conceitos portáteis como identidade de destino, modo de gravação, qualidade, política de esquema e intenção de origem permanecem no contrato principal.

Fronteira de transformacao customizada​

Para tratamentos complexos que devem ficar em codigo Databricks revisado, use source.type: custom_transform. O contrato declara entradas nomeadas, colunas esperadas de saida, regras de qualidade e destino. A extensao Databricks vincula essa fronteira semantica a uma task de notebook:

extensions:
databricks:
custom_transform:
notebook_path: ./notebooks/prepare_movie_features.py
task_key: prepare_movie_features
output_table: workspace.cf_movie_tmp.movie_feature_engineering_output

O adaptador gera artefatos de revisao e conecta o notebook como pre-task no Databricks Asset Bundle. Depois, o runtime ContractForge le a tabela de saida declarada e aplica esquema, qualidade, modo de escrita, evidencia e versionamento de deploy normalmente.

Veja o exemplo movie custom transform para um projeto bronze-to-gold completo baseado no shape de dados movies/ratings ja testado.

Referências de tabela lógica​

Quando um contrato Databricks lê uma tabela produzida por outro ContractForge contrato, prefira o ref portátil em vez de codificar o nome Unity Catalog:

source:
type: table
ref: bronze.b_products_jdbc

Para SQL:

FROM {{ table_ref:silver.s_product_tags }}

O adaptador Databricks resolve isso para a nomenclatura de catálogo/esquema de destino usada pelo projeto. AWS resolve as mesmas referências para nomes do Catálogo Glue/Iceberg.

Exemplo de tempo de execução​

from contractforge_databricks import ingest_databricks_bundle

result = ingest_databricks_bundle(
"/Workspace/Shared/contracts/silver/s_customers",
options={
"catalog": "main",
"schema": "ops",
"notebook_name": "jobs/silver/s_customers",
},
)

O adaptador cria tabelas de controle quando elas não existem, grava a tabela de destino, aplica anotações/operações/comportamento de acesso disponíveis e registra evidências antes de retornar o resultado.

Implantação​

A implantação do Databricks pertence ao adaptador e é baseada no DAB. O núcleo não é implantado jobs e não importa SDKs Databricks.

contractforge-databricks deploy-project examples/real-world/supabase-jdbc-medallion/project.yaml \
--profile dbc-dev \
--target dev

Adicione --run para executar o trabalho do pacote implementado:

contractforge-databricks deploy-project examples/real-world/supabase-jdbc-medallion/project.yaml \
--profile dbc-dev \
--target dev \
--run

Para projetos sem project.yaml, aponte diretamente para o diretório DAB ou databricks.yml:

contractforge-databricks deploy-bundle ./databricks.yml --profile dbc-dev --target dev --run

O comando do projeto lê validation.databricks.bundle de project.yaml. Se esse campo estiver ausente, o padrão será databricks.yml ao lado do projeto arquivo. O adaptador chama Databricks CLI com argumentos explícitos; isso nunca constrói strings de comando do shell.

Agendamento do projeto​

O agendamento pertence ao project.yaml, não ao contrato de ingestão. O o contrato diz o que significa um conjunto de dados; o projeto diz como são os jobs na plataforma connected.

schedule:
cron: "0 6 * * *"
timezone: America/Sao_Paulo
enabled: false
max_concurrent_runs: 1
queue: true
adapters:
databricks:
pause_status: PAUSED
tasks:
bronze_orders:
task_key: bronze_orders

execution_order:
- name: bronze_orders
contracts:
databricks: contracts/databricks/bronze_orders.ingestion.yaml
- name: silver_orders
depends_on: [bronze_orders]
contracts:
databricks: contracts/databricks/silver_orders.ingestion.yaml

Renderize um pacote de ativos Databricks a partir desses metadados:

contractforge-databricks render-project-bundle project.yaml \
--output databricks.yml \
--force

Ou renderize e implemente em um fluxo de propriedade do adaptador:

contractforge-databricks deploy-project project.yaml \
--render-bundle \
--force-render \
--target dev

O renderizador mapeia dependências e mapas de tarefas depends_on para Databricks schedule.cron / schedule.timezone de nível superior para a programação de trabalhos Databricks bloquear. AWS mapeia o mesmo cronograma do projeto para o EventBridge Scheduler sem alterar contratos de ingestão.

Exemplos de revisão necessária​

Databricks pode suportar muitas semânticas nativamente, mas algumas solicitações ainda precisam de revisão explícita:

Solicitação de contratoPor que a revisão pode ser necessária
histórico em snapshots de origem não DeltaA completude e a semântica de exclusão devem ser comprovadas.
Row filters/masksOs privilégios e a disponibilidade do recurso Unity Catalog variam de acordo com o espaço de trabalho.
Available-now streamingOs locais de pontos de verificação e esquemas devem ser controlados e duráveis.
Conectores nativos LakeflowO comportamento específico da fonte é de propriedade do Databricks e pode não ser portátil.

O adaptador deve retornar diagnósticos de revisão em vez de ocultar essas decisões no código gerado.