Pipeline completo de ingestão, processamento e análise de dados de licitações do governo brasileiro, utilizando arquitetura moderna de Data Lake com camadas medallion (Bronze, Silver, Gold).
Automatizar a coleta, processamento e disponibilização de dados públicos de licitações governamentais, permitindo análises e insights sobre processos licitatórios no Brasil.
┌─────────────────────────────────────────────────────────────┐
│ PIPELINE DE DADOS │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ Airflow │─────▶│ Airbyte │ │
│ │(Orquestração)│ │ (Ingestão) │ │
│ └──────────────┘ └──────┬───────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────┐ │
│ │ Azure Synapse │ │
│ │ ┌───────────────┐ │ │
│ │ │ Spark Pool │ │ │
│ │ │ (Processing) │ │ │
│ │ └───────────────┘ │ │
│ └──────────┬──────────┘ │
│ │ │
│ ▼ │
│ ┌────────────────────────────────┐ │
│ │ ADLS Gen2 (Data Lake) │ │
│ │ │ │
│ │ 📁 Transient (staging) │ │
│ │ 📁 Bronze (raw) │ │
│ │ 📁 Silver (cleaned) │ │
│ │ 📁 Gold (aggregated) │ │
│ │ 📁 Archive (historical) │ │
│ └────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
- Apache Airflow - Orquestração de pipelines e scheduling
- Airbyte - Plataforma de ingestão de dados (ELT)
- Azure Synapse Analytics - Data warehouse e processamento distribuído
- Apache Spark (via Synapse) - Processamento big data
- Delta Lake - Camada de armazenamento ACID
- Azure Data Lake Storage Gen2 - Data lake escalável
- Terraform - Provisionamento de infraestrutura na Azure
- Azure CLI - Automação e configuração
- Python - Scripts e transformações
- PySpark - Processamento distribuído de dados
- SQL - Queries e transformações
licitacao_gov/
│
├── airflow/ # Configuração do Airflow
│ ├── dags/ # DAGs de orquestração
│ │ └── licitacoes_dag.py # Pipeline principal
│
├── airbyte/ # Configuração do Airbyte
│ ├── sources/ # Definições de fontes de dados
│
├── src/ # Fonte do código
│ ├── notebooks/ # Notebooks PySpark
│ │ ├── bronze_to_silver.ipynb
│ │ └── silver_to_gold.ipynb
│
├── infra/ # Infraestrutura como Código
│ ├── main.tf # Recursos principais
│ ├── variables.tf # Variáveis
│ ├── outputs.tf # Outputs
│ └── README.md # 📖 [Documentação de Infra](infra/README.md)
│
├── scripts/ # Scripts auxiliares
│ ├── setup.sh # Setup inicial
│ └── deploy.sh # Deploy automatizado
│
├── docs/ # Arquivos para doc
├── .gitignore
└── README.md # Este arquivo
- Azure Subscription ativa
- Terraform >= 1.0
- Azure CLI autenticado
- Docker & Docker Compose
- Python >= 3.9
cd infra/
# Configurar variáveis
cp terraform.tfvars.example terraform.tfvars
# Edite terraform.tfvars com suas configurações
# Provisionar recursos Azure
terraform init
terraform plan
terraform apply
# Salvar credenciais do Service Principal
terraform output -raw airflow_client_secret > ../credentials.txt📖 Detalhes: Veja infra/README.md para documentação completa da infraestrutura.
# Inicializar projeto Astro
astro dev init
# Subir o Airflow localmente
astro dev start
# Acessar UI
# http://localhost:8080
# Usuário: admin / Senha: admin
# Configurar conexão Azure Synapse, adls e airbyte
sudo abctl local install
# Acessar UI
# http://localhost:8000
# Usuário: airbyte / Senha: *pega utilizando o comando abaixo:*
sudo abctl local credentialsCrie uma nova source de API pela aba BUILDER na UI, e importe o yaml que esta em airbyte/sources/licitacoes_gov_br.yaml
Apos isso configure uma connection com a destination Azure Blob Storage
No Synapse Studio, navegue até Develop (ícone de código </> no menu lateral) Clique em + → Import Selecione todos os notebooks da pasta src/notebooks/:
Transient_to_Bronze.ipynb Bronze_to_Silver.ipynb Silver_to_Gold.ipynb
Aguarde o upload completar Publique as mudanças clicando em Publish all no topo
Você precisa criar 3 pipelines, uma para cada camada de transformação.
Pipeline 1: Transient → Bronze Nome: bronze_licitacoes_pipeline
Vá em Integrate (ícone de pipeline no menu lateral) Clique em + → Pipeline Nomeie como: bronze_licitacoes_pipeline Arraste um Notebook activity para o canvas Configure o notebook:
Notebook: Selecione Transient_to_Bronze Spark pool: Selecione sparkpool1
IMPORTANTE: Configurar parâmetro de entrada
Vá na aba Settings do notebook activity Em Base parameters, clique em + New Adicione:
Name: input_file Type: String Value: @pipeline().parameters.input_file
Configure o parâmetro no nível da pipeline:
Clique em uma área vazia do canvas (para selecionar a pipeline) Vá na aba Parameters Clique em + New Adicione:
Name: input_file Type: String Default value: (deixe vazio ou use um caminho de teste)
Publique a pipeline: Publish all
💡 Por que o parâmetro input_file? O Airbyte vai passar o caminho do arquivo gerado dinamicamente para esta pipeline via Airflow.
Via Airflow UI, ative e execute a DAG 'licitacoes_dag'
- Dados brutos ingeridos sem transformação
- Formato: JSON/Parquet original
- Retenção: 90 dias
- Dados limpos e normalizados
- Validações de qualidade aplicadas
- Formato: Delta Lake
- Retenção: 1 ano
- Dados agregados e otimizados para análise
- KPIs e métricas de negócio
- Formato: Delta Lake / Tabela física
- Retenção: Indefinida
- Área de staging temporária
- Dados intermediários durante processamento
- Dados históricos arquivados
- Conformidade e auditoria
- Armazenamento de longo prazo
1. Ingestão (Airbyte)
└─> API Licitações → Transient (JSON)
2. Raw Layer (Airflow → Synapse)
└─> Transient → Bronze (Parquet)
3. Archive (Airflow)
└─> Bronze → Archive (histórico)
4. Cleaned Layer (Synapse Spark)
└─> Bronze → Silver (Delta Lake)
├─ Validação de schema
├─ Limpeza de dados
├─ Deduplicação
└─ Normalização
5. Aggregated Layer (Synapse Spark)
└─> Silver → Gold (Delta Lake)
├─ Agregações
├─ KPIs
└─ Tabelas dimensionais
- ✅ Autenticação: Service Principal com RBAC
- ✅ Criptografia: Em repouso (Storage) e em trânsito (TLS)
- ✅ Auditoria: Logs centralizados no Azure Monitor
- ✅ Firewall: Regras de rede configuradas
- ✅ Secrets: Gerenciados via Terraform (sensitive outputs)
- ✅ LGPD/GDPR: Dados anonimizados quando necessário
- Airflow UI: Status de DAGs e tasks
- Azure Monitor: Métricas de recursos
- Synapse Studio: Execução de pipelines e queries
- Fork o projeto
- Crie uma branch para sua feature (
git checkout -b feature/AmazingFeature) - Commit suas mudanças (
git commit -m 'Add some AmazingFeature') - Push para a branch (
git push origin feature/AmazingFeature) - Abra um Pull Request
- Arthur Andrade - GitHub
- 🏗️ Infraestrutura (Terraform) - Setup completo da infraestrutura Azure
Feito com ❤️ usando tecnologias open source e Azure
⭐ Se este projeto foi útil, considere dar uma estrela!