Pipeline de ingestão de dados da NASA GCN (Gamma-ray Coordinates Network) usando Databricks Asset Bundles e Lakeflow Declarative Pipelines.
- 📋 Pré-requisitos
- 🚀 Configuração do Ambiente Local
- 🔑 Configurar Credenciais NASA GCN
- 📦 Databricks Asset Bundles
- 🏗️ Arquitetura
- 📊 Tabelas
- 🔗 Referências
- Python 3.11+
- Databricks CLI v0.200+
- uv (gerenciador de pacotes Python)
- Conta no Databricks Free Edition
- Credenciais da NASA GCN
curl -Ls https://astral.sh/uv/install.sh | sh
source $HOME/.local/bin/envgit clone https://github.com/seu-usuario/projeto-nasa-gcn.git
cd projeto-nasa-gcnuv sync --devIsso criará um ambiente virtual em .venv/ com todas as dependências.
# macOS/Linux
curl -fsSL https://raw.githubusercontent.com/databricks/setup-cli/main/install.sh | sh
# Ou via Homebrew
brew install databricks/tap/databricksdatabricks configureInforme:
- Host: URL do seu workspace (ex:
https://dbc-xxxxx.cloud.databricks.com) - Token: Gere em Settings > Developer > Access Tokens
databricks auth profilesAcesse gcn.nasa.gov e crie uma conta.
- Faça login no GCN
- Vá em Quickstart > Credentials
- Copie o
Client IDeClient Secret
Copie o arquivo de exemplo:
cp .env.example .envPara melhor segurança, use credenciais encodadas em Base64:
# Use o script helper para encodar suas credenciais
python scripts/encode_credentials.pyO script irá:
- Solicitar suas credenciais (input oculto)
- Codificá-las em Base64
- Exibir os valores para copiar no
.env
Cole a saída no arquivo .env:
GCN_CLIENT_ID_B64=c2V1X2NsaWVudF9pZF9hcXVp
GCN_CLIENT_SECRET_B64=c2V1X2NsaWVudF9zZWNyZXRfYXF1aQ==Edite o arquivo .env diretamente:
GCN_CLIENT_ID=seu_client_id_aqui
GCN_CLIENT_SECRET=seu_client_secret_aqui- O arquivo
.envestá no.gitignoree não será commitado - Base64 é ofuscação, NÃO encriptação (veja seção de segurança abaixo)
O Databricks Community Edition (Free) possui limitações importantes:
- ❌ Não suporta Databricks Secrets API
- ❌ Não suporta integração com Azure Key Vault / AWS Secrets Manager
- ❌ Não suporta Service Principals
- ✅ Suporta apenas variáveis de ambiente e configuração de jobs
Para mitigar riscos no Free Edition, implementamos Base64 encoding:
O que Base64 oferece:
- ✅ Ofuscação básica contra visualização acidental
- ✅ Reduz exposição em logs e screenshots
- ✅ Dificulta exposição em process inspection
- ✅ Compatível com Community Edition
O que Base64 NÃO oferece:
- ❌ NÃO é encriptação - pode ser facilmente decodificado
- ❌ NÃO protege contra acessos maliciosos
- ❌ NÃO substitui gerenciamento adequado de secrets
Se você migrar para um workspace pago do Databricks, recomendamos fortemente usar:
-
Databricks Secrets (recomendado)
dbutils.secrets.get(scope="gcn_secrets", key="client_id")
-
Azure Key Vault (Azure)
- Integração nativa com Databricks
- Documentação
-
AWS Secrets Manager (AWS)
- Integração via Secrets Scopes
- Documentação
- 🔒 Use Base64 encoding no Community Edition
- 🔄 Rotacione credenciais periodicamente
- 📝 Nunca commite o arquivo
.env - 🚨 Monitore logs para exposições acidentais
- 🎯 Planeje migração para Databricks Secrets ao escalar
💡 Nota: Esta configuração foi projetada para balancear segurança e compatibilidade com o Databricks Free Edition. Para produção, sempre use soluções enterprise de gerenciamento de secrets.
databricks bundle validateUse o script deploy.sh que carrega as credenciais do .env automaticamente:
# Apenas deploy (envia código para o Databricks)
./deploy.sh
# Deploy + executa o job completo
./deploy.sh run
# Apenas executa o job (sem fazer novo deploy)
./deploy.sh run-onlySaída esperada:
============================================================
NASA GCN Pipeline - Deploy Script
============================================================
Target: dev
Profile: dltreinamentos.data@gmail.com
============================================================
🚀 Deploying bundle...
✅ Deploy concluído!
🏃 Executando job...
Após a execução, o Status Report exibe métricas de linhas processadas:
🥉 BRONZE
• gcn_raw: 3,385,887 (total) | +726 (última execução)
🥈 SILVER
• gcn_classic_text: 15,381 (total) | +4 (última execução)
• gcn_heartbeat: 3,334,431 (total) | +713 (última execução)
...
🥇 GOLD
• gcn_events_summarized: 125 (total) | +125 (última execução)
💡 As métricas são obtidas do Event Log do DLT, consultando
num_output_rowsde cada tabela.
# Deploy para produção
TARGET=prod ./deploy.sh run
# Usar outro perfil do Databricks
PROFILE=meu-perfil ./deploy.sh runSe preferir executar manualmente sem o script:
source .env
export BUNDLE_VAR_gcn_client_id=$GCN_CLIENT_ID
export BUNDLE_VAR_gcn_client_secret=$GCN_CLIENT_SECRET
databricks bundle deploy -t dev
databricks bundle run nasa_gcn_job┌──────────────────┐
│ NASA GCN Kafka │
└────────┬─────────┘
│
▼
┌──────────────────┐
│ gcn_raw │ Bronze
│ (todas msgs) │
└────────┬─────────┘
│
┌────┴────┬────────┬────────┬────────┬────────┬────────┐
▼ ▼ ▼ ▼ ▼ ▼ ▼
┌───────┐ ┌───────┐ ┌───────┐ ┌───────┐ ┌───────┐ ┌───────┐ ┌───────┐
│ text │ │voevent│ │binary │ │notices│ │circu- │ │igwn_ │ │heart- │
│ │ │ │ │ │ │ │ │lars │ │gwalert│ │beat │
└───────┘ └───────┘ └───────┘ └───────┘ └───────┘ └───────┘ └───────┘
Silver Layer
│
▼
┌─────────────┐
│ Gold Layer │ gcn_events_summarized
└─────────────┘
## 📊 Tabelas
| Tabela | Camada | Descrição |
|--------|--------|-----------|
| `gcn_raw` | Bronze | Todas as mensagens raw do Kafka |
| `gcn_classic_text` | Silver | Alertas em formato texto ([Docs RAG](docs/GCN_CLASSIC_TEXT_RAG.md)) |
| `gcn_classic_voevent` | Silver | Alertas em formato VoEvent XML ([Docs RAG](docs/GCN_CLASSIC_VOEVENT_RAG.md)) |
| `gcn_classic_binary` | Silver | Alertas em formato binário ([Docs RAG](docs/GCN_CLASSIC_BINARY_RAG.md)) |
| `gcn_notices` | Silver | Novos alertas em formato JSON ([Docs RAG](docs/GCN_NOTICES_RAG.md)) |
| `gcn_circulars` | Silver | Circulares astronômicas ([Docs RAG](docs/GCN_CIRCULARS_RAG.md)) |
| `igwn_gwalert` | Silver | Alertas de ondas gravitacionais ([Docs RAG](docs/IGWN_GWALERT_RAG.md)) |
| `gcn_heartbeat` | Silver | Mensagens de teste/heartbeat |
| `gcn_events_summarized` | **Gold** | Joia da Coroa: Eventos consolidados com narrativa ([Docs](docs/GOLD_LAYER.md)) |
## 🔗 Referências
- [NASA GCN Documentation](https://gcn.nasa.gov/docs)
- [Databricks Asset Bundles](https://docs.databricks.com/dev-tools/bundles/index.html)
- [Lakeflow Declarative Pipelines](https://docs.databricks.com/delta-live-tables/index.html)
- [uv Package Manager](https://docs.astral.sh/uv/)
## 📄 Licença
MIT