Skip to main content

Ferramenta interativa para migrar dashboards do Apache Superset entre ambientes

Project description

superset-migrator 🚀

Ferramenta interativa para migrar dashboards do Apache Superset entre ambientes (devel → staging → production), substituindo automaticamente as conexões conflitantes de banco de dados.

O problema resolvido

O export/import nativo do Superset inclui sqlalchemy_uri hard-coded. Esta ferramenta intercepta o ZIP, troca as URIs pelo ambiente de destino, e todo o gerenciamento de credenciais é feito via menus — sem editar YAML manualmente.

Instalação

# Clonar o repositório
git clone https://github.com/w4lto/superset-migrator
cd superset-migrator

# Instalar (recomendado: ambiente virtual)
python -m venv .venv
source .venv/bin/activate     # Linux/macOS
.venv\Scripts\activate        # Windows

pip install -e .

Uso

Menu interativo

superset-migrator

Na primeira execução, um wizard guia o cadastro dos ambientes:

╭─────────────────────────────────────────╮
│         superset-migrator               │
│  Migração de dashboards entre ambientes │
╰─────────────────────────────────────────╯

Primeira execução!
Nenhum ambiente configurado. Vamos cadastrar pelo menos dois ambientes...

Ambiente de ORIGEM:
? Nome do ambiente: devel
? URL do Superset: http://superset-devel:8088
? Usuário: admin
? Senha: ****

Ambiente de DESTINO:
? Nome do ambiente: staging
? URL do Superset: http://superset-staging:8088
...

Menu principal

? Menu principal  [origem: devel]
  🚀  Exportar dashboard (gerar ZIP)
  📤  Enviar ZIP para ambiente
  📋  Listar dashboards
  ⚙️   Gerenciar ambientes
  🗄️   Gerenciar bancos de dados
  ❌  Sair

Fluxo de exportação

Suporta seleção múltipla de dashboards:

  1. Selecionar dashboards — lista com checkbox ou busca por título
  2. Selecionar ambiente de destino
  3. Resolver bancos sem mapeamento (se houver) — cadastra URIs na hora
  4. Gerar ZIPs — um arquivo por dashboard
? Como deseja localizar os dashboards?
  📋  Listar todos e selecionar

? Selecione os dashboards (espaço para marcar, enter para confirmar):
  ◉ [1] Dashboard de Vendas  [slug: vendas]
  ◉ [2] Dashboard Financeiro  [slug: financeiro]
  ◯ [3] Dashboard de RH

📦 2 dashboard(s) selecionado(s)

Exportando 2 dashboard(s) para 'staging':

(1/2) Dashboard de Vendas
  ✓ dashboard_1_vendas_staging_20240220.zip
(2/2) Dashboard Financeiro
  ✓ dashboard_2_financeiro_staging_20240220.zip

╭─────────────────────────────────────────────────╮
│ ✓ 2 dashboard(s) exportado(s) com sucesso!      │
╰─────────────────────────────────────────────────╯

Fluxo de importação (secundário)

Suporta importação de múltiplos arquivos:

  1. Escolher modo — único arquivo ou múltiplos de um diretório
  2. Selecionar arquivos — com checkbox para múltipla seleção
  3. Selecionar ambiente de destino
  4. Confirmar sobrescrita
  5. Importar via API + sincronizar datasets automaticamente
? Modo de importação:
  📄  Importar um único arquivo
❯ 📁  Importar múltiplos arquivos de um diretório

? Diretório com os arquivos ZIP: ./exports
? Selecione os arquivos (3 encontrados):
  ◉ dashboard_1_vendas_staging.zip
  ◉ dashboard_2_financeiro_staging.zip
  ◯ dashboard_3_rh_staging.zip

Importando 2 arquivo(s) para 'staging':

(1/2) dashboard_1_vendas_staging.zip
  ✓ Importado
(2/2) dashboard_2_financeiro_staging.zip
  ✓ Importado

✓ 2 dashboard(s) importado(s) com sucesso!
? Sincronizar colunas dos 5 dataset(s)? Sim

Busca por slug

O Superset permite configurar URLs customizadas para dashboards (ex: dashboard_1_vendas_staging). A ferramenta usa essa URL como chave:

? Como deseja localizar o dashboard?
❯ 🔍  Buscar por slug (URL customizada)
  📋  Listar todos e selecionar
  🔎  Buscar por título

? Slug do dashboard: dashboard_1_vendas_staging
✓ Dashboard encontrado: Vendas homologação 1s2026 (ID: 42)

Primeiro banco de dados encontrado

Se o dashboard usa um banco que ainda não tem mapeamento:

┌─ Atenção ──────────────────────────────────────────────────┐
│ Os seguintes bancos não têm mapeamento para 'staging':     │
└────────────────────────────────────────────────────────────┘
  • SQL Server Principal
    URI atual (origem): mssql+pyodbc://sa:***@devel-sql:1433/MyDB?...

? Deseja cadastrar as URIs agora para continuar? Sim

Banco: SQL Server Principal  →  Ambiente: staging
? SQLAlchemy URI: mssql+pyodbc://sa:pass@staging-sql:1433/MyDB?driver=...

✓ Mapeamentos salvos para uso futuro.

Os mapeamentos são salvos em ~/.superset-migrator/config.yaml e reutilizados automaticamente em migrações futuras.

Gerenciar bancos de dados

? O que deseja fazer?
❯ [+] Adicionar/editar banco
  [-] Remover banco
  ← Voltar

A tabela de bancos mostra o status de cada ambiente:

╭──────────────────────────────────────────────────────────────────────╮
│ Banco (nome no Superset)  │ devel      │ staging    │ production     │
├───────────────────────────┼────────────┼────────────┼────────────────┤
│ SQL Server Principal      │ ✓ sa:***@… │ ✓ sa:***@… │ ✗ não mapeado │
│ ClickHouse Analytics      │ ✓ user:*** │ ✓ user:*** │ ✓ user:***    │
╰──────────────────────────────────────────────────────────────────────╯

Sincronização de datasets

Após importar um dashboard, o Superset pode não sincronizar automaticamente as colunas dos datasets (especialmente quando a conexão do banco mudou). O aplicativo oferece sincronização automática:

✓ Dashboard importado com sucesso no ambiente 'staging'!
? Sincronizar colunas dos 3 dataset(s)? (Sim)

🔄 Sincronizando 3 dataset(s)...
  ✓ dataset_vendas
  ✓ dataset_clientes
  ✓ dataset_produtos

✓ Todos os 3 dataset(s) sincronizados!

Modo CI/CD

Para uso em pipelines automatizados:

# Migra por slug e importa automaticamente
superset-migrator migrate --slug emv_transacoes_mancuso --to staging --push

# Gera apenas o ZIP (sem importar)
superset-migrator migrate --slug meu-dashboard --to production --output ./exports/

# Importa um ZIP já existente (com sincronização automática)
superset-migrator import-zip dashboard_42_staging.zip --env staging

# Importa sem sincronizar datasets
superset-migrator import-zip dashboard_42_staging.zip --env staging --no-sync

Estrutura do ZIP do Superset

export_abc123/
├── metadata.yaml
├── databases/
│   └── SQL_Server_Principal.yaml    ← sqlalchemy_uri substituída aqui
├── datasets/
│   └── SQL_Server_Principal/
│       └── minha_tabela.yaml
├── charts/
│   └── Meu_Grafico.yaml
└── dashboards/
    └── Meu_Dashboard.yaml

Apenas os arquivos em databases/ são modificados. O resto é preservado integralmente.

Arquivo de configuração

Fica em ~/.superset-migrator/config.yaml e é gerenciado pela própria ferramenta. Você pode editá-lo manualmente se preferir:

environments:
  devel:
    url: http://superset-devel:8088
    username: admin
    password: admin
    is_source: true
  staging:
    url: http://superset-staging:8088
    username: admin
    password: admin

database_mappings:
  - name: SQL Server Principal
    environments:
      devel:
        sqlalchemy_uri: mssql+pyodbc://sa:pass@devel-sql:1433/MyDB?driver=ODBC+Driver+17+for+SQL+Server
      staging:
        sqlalchemy_uri: mssql+pyodbc://sa:pass@staging-sql:1433/MyDB?driver=ODBC+Driver+17+for+SQL+Server

Dependências

Pacote Versão Função
click ≥8.1 Estrutura do CLI
httpx ≥0.27 Requisições HTTP à API Superset
pyyaml ≥6.0 Leitura/escrita do config
questionary ≥2.0 Prompts interativos
rich ≥13.0 Tabelas, painéis e formatação

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

superset_migrator-1.0.1.tar.gz (28.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

superset_migrator-1.0.1-py3-none-any.whl (29.2 kB view details)

Uploaded Python 3

File details

Details for the file superset_migrator-1.0.1.tar.gz.

File metadata

  • Download URL: superset_migrator-1.0.1.tar.gz
  • Upload date:
  • Size: 28.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for superset_migrator-1.0.1.tar.gz
Algorithm Hash digest
SHA256 601581fb2c583f653937a9c0097f2c24ce2ec1c4e635153381008431be4a8879
MD5 477da4464aa822d8e1f12ed2e9768526
BLAKE2b-256 48b59bebec4351459c0cfe2523a381d5adbbb84f4556e3c19e2702e44f756ee0

See more details on using hashes here.

Provenance

The following attestation bundles were made for superset_migrator-1.0.1.tar.gz:

Publisher: publish.yml on w4lto/superset-migrator

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file superset_migrator-1.0.1-py3-none-any.whl.

File metadata

File hashes

Hashes for superset_migrator-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 4e1a40f1c2177df15b8e0204954c06c1d726606f58cf621edd67622dbc6926f1
MD5 54a384d6920bbd2b44dab5a4d16f59fc
BLAKE2b-256 32851829667bb14be2db57c24256877b5602482d0fd478c2925cda823ac0898d

See more details on using hashes here.

Provenance

The following attestation bundles were made for superset_migrator-1.0.1-py3-none-any.whl:

Publisher: publish.yml on w4lto/superset-migrator

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page