Blog Post
20 May 2025

Versionamento de código na Databricks: boas práticas e ferramentas

Written by:
Indicium AI

Descubra os benefícios de versionar seu trabalho na Databricks. Saiba como transformar processos complexos em fluxos organizados e colaborativos que elevam a qualidade dos seus projetos de dados.

Ao adotar boas práticas de controle de versão, profissionais de dados conseguem rastrear alterações, colaborar com mais eficiência, evitar conflitos de código e garantir a reprodutibilidade de seus pipelines de dados.

No universo da engenharia de dados, combinar ferramentas robustas de controle de versão com os recursos analíticos da Databricks pode aumentar de forma significativa a produtividade das equipes e a confiabilidade dos sistemas.

Entenda como implementar um sistema eficaz de controle de versão na Databricks e entregar resultados relevantes para sua equipe de dados.

O que é versionamento de código e por que é essencial na Databricks?

O versionamento de código é um sistema que registra alterações em arquivos ao longo do tempo, permitindo recuperar versões específicas sempre que necessário.

Em plataformas como a Databricks, onde notebooks, scripts e jobs são centrais nos fluxos de dados, o versionamento se torna ainda mais crítico.

Desafios de desenvolver sem controle de versão na Databricks

Sem um sistema adequado de versionamento, equipes que utilizam a Databricks enfrentam problemas como:

  • Perda acidental de códigos valiosos quando notebooks são sobrescritos
  • Dificuldade para rastrear quem fez alterações específicas e por quê
  • Impossibilidade de retornar a versões anteriores quando surgem erros
  • Colaboração complexa quando múltiplos analistas e engenheiros trabalham ao mesmo tempo
  • Inconsistências entre ambientes de desenvolvimento, teste e produção

Como relatou recentemente um engenheiro de dados: “Perdemos dois dias inteiros de trabalho quando um notebook de produção foi sobrescrito por engano. O controle de versão teria evitado esse problema.”

Benefícios de um controle de versão adequado

  • A adoção de práticas sólidas de versionamento traz diversas vantagens:
  • Rastreabilidade completa das alterações (quem fez, quando e por quê)
  • Recuperação rápida de versões anteriores
  • Desenvolvimento paralelo sem interferência entre membros da equipe
  • Processos de implantação consistentes entre ambientes
  • Conformidade com requisitos de governança e auditoria

Integrando a Databricks ao Git: a base do controle de versão

Conectar a Databricks a sistemas Git como GitHub, GitLab ou Azure DevOps estabelece a base para um versionamento robusto. Essa integração leva o poder do controle de versão distribuído para seus fluxos de dados.

Configurando a integração com Git na Databricks

Para configurar a integração com Git na Databricks, siga estes passos:

  • Configure a autenticação no Git utilizando tokens de acesso pessoal (PATs) ou chaves SSH
  • Conecte seu workspace da Databricks ao repositório Git desejado
  • Defina as permissões adequadas de acesso ao repositório

Exemplo de configuração utilizando a API REST da Databricks:

import requests
import json

databricks_instance = "https://seuworkspace.databricks.com"
api_token = "api_token"
headers = {"Authorization": f"Bearer {api_token}"}

git_config = {
    "personal_access_token": "personal_access_token",
    "git_username": "git_username",
    "git_provider": "gitHub"  # or "gitLab", "azureDevOpsServices", "bitbucketCloud"
}

response = requests.patch(
    f"{databricks_instance}/api/2.0/git-credentials",
    headers=headers,
    data=json.dumps(git_config)
)

print(f"status: {response.status_code}")
print(f"response: {response.json()}")

Fluxos de trabalho Git comuns na Databricks

Os fluxos de trabalho Git mais eficazes para equipes que utilizam a Databricks incluem:

Git Flow

Ideal para equipes maiores com ciclos regulares de lançamento. Define ramificações específicas:

  • main: código estável em produção
  • develop: integração para a próxima versão
  • feature/*: desenvolvimento de novas funcionalidades
  • release/*: preparação de versão
  • hotfix/*: correções urgentes em produção

GitHub Flow

Mais simples e adequado para entrega contínua:

  • O main branch sempre contém código pronto para produção
  • Ramificações de funcionalidade para desenvolvimento
  • Pull requests para revisão antes da mesclagem

GitLab Flow

Adiciona ramificações específicas por ambiente ao GitHub Flow:

  • main → staging → production
  • Ramificações de funcionalidade são mescladas na main
  • Promoção controlada entre ambientes

Git Folders: controle de versão nativo na plataforma da Databricks

Git Folders (anteriormente conhecidos como Databricks Repos) são um recurso nativo que facilita o trabalho com repositórios Git diretamente na interface da Databricks, trazendo o controle de versão para dentro da própria plataforma.

Principais recursos dos Git Folders

  • Interface visual para operações comuns do Git
  • Sincronização automática entre o repositório Git e o workspace
  • Gerenciamento de ramificações dentro do ambiente da Databricks
  • Histórico de commits e comparação entre versões
  • Suporte a múltiplos provedores Git (GitHub, GitLab, Azure DevOps, Bitbucket)
  • Visual interface for common Git operations

Como configurar e utilizar Git Folders

Para começar a usar Git Folders na Databricks:

  1. Acesse a seção Git Folders na barra lateral da Databricks
  2. Clique em Create Git Folder
  3. Insira a URL do repositório Git e suas credenciais
  4. Clone o repositório no seu workspace

Após a configuração, você pode:

  • Alternar entre ramificações existentes ou criar novas
  • Registrar alterações diretamente no repositório
  • Visualizar diferenças entre versões
  • Atualizar o código a partir do repositório remoto
  • Enviar alterações locais para o repositório remoto

Organizando código com Git Folders

Uma estrutura eficiente para organizar projetos de dados pode seguir o modelo:

project/
|-- notebooks/
|   |-- bronze/        # ingestion and initial validation
|   |-- silver/        # intermediate transformations
|   |-- gold/          # analytics layer and modeling
|-- conf/              # environment-specific configurations
|-- jobs/              # job definitions
|-- libraries/         # shared libraries
|-- tests/             # automated tests
|-- README.md

Boas práticas de versionamento na Databricks

Seguir estas práticas garante um processo de controle de versão robusto e eficiente.

Estrutura de repositório e organização de código

  • Crie repositórios separados para projetos distintos
  • Organize notebooks em diretórios lógicos com base na arquitetura medallion (bronze/silver/gold)
  • Mantenha arquivos de configuração separados do código
  • Utilize arquivos README para documentar a estrutura e o propósito de cada diretório

Estratégias de ramificação para diferentes ambientes

Uma estratégia eficaz inclui ramificações dedicadas para:

  • Desenvolvimento (develop)
  • Qualidade (qa)
  • Homologação (staging)
  • Produção (main ou production)

Implemente gates de qualidade entre ambientes utilizando pull requests com aprovações obrigatórias.

Revisão de código e pull requests

O processo de revisão deve incluir:

  • Revisores designados com conhecimento no domínio
  • Checklist padronizado de revisão
  • Verificações automatizadas de qualidade
  • Execução automática de testes antes da aprovação

Versionamento semântico para bibliotecas e releases

Adote versionamento semântico (SemVer) para todas as versões:

  • Versão maior (X.0.0): alterações que quebram compatibilidade
  • Versão menor (0.X.0): novas funcionalidades compatíveis
  • Versão de correção (0.0.X): correções de erros

Integração de CI/CD com versionamento

Integre o versionamento aos pipelines de CI/CD:

# example of a CI/CD pipeline for Databricks in Azure DevOps
trigger:
  branches:
    include:
    - develop
    - main

stages:
- stage: BuildAndTest
  jobs:
  - job: UnitTests
    steps:
    - script: pytest tests/unit
      displayName: 'Run Unit Tests'

- stage: DeployToQA
  condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/develop'))
  jobs:
  - job: DeployNotebooks
    steps:
    - task: DatabricksDeployment@0
      inputs:
        databricksAccessToken: $(databricks_qa_token)
        workspaceUrl: 'https://qa-workspace.databricks.com'
        notebooksFolderPath: '$(Build.SourcesDirectory)/notebooks'
        notebooksTargetPath: '/Shared/project-name'

- stage: DeployToProd
  condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
  jobs:
  - job: DeployNotebooks
    steps:
    - task: DatabricksDeployment@0
      inputs:
        databricksAccessToken: $(databricks_prod_token)
        workspaceUrl: 'https://prod-workspace.databricks.com'
        notebooksFolderPath: '$(Build.SourcesDirectory)/notebooks'
        notebooksTargetPath: '/Shared/project-name'

Ferramentas complementares para versionamento na Databricks

Para fortalecer ainda mais seu processo de controle de versão, considere as ferramentas a seguir.

Utilitário de exportação de notebooks da Databricks

Permite exportar notebooks de forma programática:

import os
from databricks_cli.workspace.api import WorkspaceApi
from databricks_cli.configure.provider import ProfileConfigProvider
from databricks_cli.sdk.api_client import ApiClient

def export_notebooks(source_path, target_dir, format="SOURCE"):
    """
    Exports all notebooks from a Databricks workspace directory to local files.
    
    Args:
        source_path: Path of the directory in the Databricks workspace
        target_dir: Local directory to save the notebooks
        format: Export format (SOURCE, HTML, JUPYTER)
    """
    config = ProfileConfigProvider("DEFAULT").get_config()
    api_client = ApiClient(host=config.host, token=config.token)
    workspace_api = WorkspaceApi(api_client)
    
    # list all objects in the directory
    objects = workspace_api.list(source_path)
    
    if not os.path.exists(target_dir):
        os.makedirs(target_dir)
    
    for obj in objects:
        target_path = os.path.join(target_dir, obj.basename)
        
        if obj.object_type == "DIRECTORY":
            # recursively export subdirectories
            export_notebooks(obj.path, target_path, format)
        elif obj.object_type == "NOTEBOOK":
            # export the notebook
            with open(f"{target_path}.py", "wb") as f:
                content = workspace_api.export(obj.path, format)
                f.write(content)
            print(f"Exported: {obj.path} -> {target_path}.py")

# example usage
export_notebooks("/Shared/Project", "./backup_notebooks")

dbx: CLI para workflows na Databricks

dbx é uma ferramenta de linha de comando que simplifica:

  • Implantação de jobs diretamente a partir do Git
  • Execução de testes em ambientes da Databricks
  • Integração com pipelines de CI/CD

Instalação e configuração básicas:

pip install dbx

# initialize a new project
dbx init --template jobs-minimal

# deploy a job
dbx deploy --jobs=job_name --environment=dev

Integrações com gerenciadores de pacotes

Para bibliotecas Python compartilhadas:

# create package structure
mkdir -p mypackage/mypackage
touch mypackage/setup.py mypackage/mypackage/__init__.py
# in setup.py
from setuptools import setup, find_packages

setup(
    name="mypackage",
    version="0.1.0",
    packages=find_packages(),
    install_requires=[
        "pyspark>=3.0.0",
        "delta-spark>=1.0.0"
    ]
)
# build and upload to cluster
python setup.py sdist bdist_wheel
databricks fs cp ./dist/mypackage-0.1.0.whl dbfs:/FileStore/packages/

Desenvolvimento colaborativo com controle de versão na Databricks

O versionamento adequado é a base para um desenvolvimento colaborativo eficiente na Databricks.

Gerenciamento de conflitos e mesclagem

Para gerenciar conflitos de forma eficaz:

  • Atualize seu código com frequência
  • Divida notebooks grandes em unidades menores para reduzir conflitos
  • Utilize ferramentas como nbdime para visualizar diferenças específicas de notebooks
  • Estabeleça convenções claras de equipe para resolução de conflitos

Documentação integrada ao controle de versão

Vincule sua documentação ao controle de versão:

  • Utilize docstrings em todas as funções e notebooks
  • Mantenha o arquivo CHANGELOG.md atualizado
  • Documente decisões arquiteturais por meio de Architecture Decision Records (ADRs)
  • Use ferramentas como Sphinx para gerar documentação a partir do código

Treinamento e cultura de versionamento

Para construir uma cultura sólida de versionamento:

  • Ofereça treinamentos regulares de Git para toda a equipe
  • Crie guias rápidos para operações comuns no Git
  • Designe revisores especializados para diferentes áreas do código
  • Reconheça e valorize boas práticas de versionamento

Implementando controle de versão em projetos existentes

Migrar projetos existentes para um sistema de controle de versão exige planejamento cuidadoso.

Estratégias de migração

Uma abordagem gradual e segura inclui:

  • Realizar um inventário completo de notebooks e ativos existentes
  • Criar o repositório Git com estrutura bem definida
  • Importar notebooks com histórico inicial mínimo
  • Validar o funcionamento após a migração
  • Treinar a equipe no novo fluxo de trabalho

Estudo de caso: Otimizando uma plataforma de dados no setor financeiro

Uma gestora de investimentos transformou sua infraestrutura de dados após identificar limitações críticas em sua nova plataforma. O projeto se concentrou em três pilares: otimização de desempenho, governança robusta e redução de custos operacionais.

A abordagem implementada incluiu:

  • Reestruturação completa da Databricks para maximizar os recursos existentes
  • Adoção de um modelo ágil com squads especializados
  • Consolidação de ferramentas e eliminação de redundâncias

Os resultados foram mensuráveis:

  • Velocidade: desenvolvimento de pipelines 2x mais rápido
  • Confiabilidade: mais de 99% de disponibilidade do sistema
  • Redução de custos: economia anual de US$ 1 milhão
  • Qualidade: governança aprimorada com observabilidade de ponta a ponta

Essa transformação demonstra como a expertise direcionada pode converter desafios técnicos em vantagem competitiva, estabelecendo uma base sólida para crescimento sustentável no setor financeiro.

Conclusão: o futuro do controle de versão na Databricks

O versionamento adequado de código é essencial para equipes de dados que utilizam a Databricks. Com integração ao Git, Git Folders e as boas práticas apresentadas neste artigo, sua equipe pode colaborar de forma mais eficaz, segura e eficiente.

A implementação de um sistema robusto de controle de versão gera benefícios imediatos em rastreabilidade, qualidade de código e produtividade. Também estabelece uma base sólida para adoção de práticas avançadas como Data DevOps e MLOps.

Comece a versionar seu código na Databricks hoje mesmo. Sua equipe agradecerá pela clareza, segurança e eficiência que isso proporciona.

Newsletter

Stay Updated with the Latest Insights

Subscribe to our newsletter for the latest blog posts, case studies, and industry reports straight to your inbox.