Entrar ou criar conta

Laboratório: Pipeline de Extração do Bluesoft ERP para Dashboard no Metabase via PostgreSQL

Você irá implementar um pipeline completo: extração de dados da API do Bluesoft ERP, carga em um banco PostgreSQL próprio e visualização em dashboards no Metabase. O laboratório pode ser concluído em cerca de 2 a 3 horas.

Análise de dados para supermercados com Metabase + Bluesoft ERP
Ligado ao treinamento Análise de dados para supermercados com Metabase + Bluesoft ERP

Roteiro para estudo em ambiente de laboratório ou de teste. Execute apenas em equipamentos, redes e contas que você tenha autorização para usar, com backup e homologação próprios. Comandos podem causar indisponibilidade ou perda de dados. Software e marcas citados pertencem aos seus titulares. Termos de Uso.

Status de validaçãoNão validado pela Upnetix: roteiro derivado da documentação oficial, para você executar e validar
Duração estimada
120 min
Passos
10
Validações
4
Versões da documentação consultada
PostgreSQL a versão estável atual · Python a versão estável atual · Metabase a versão estável atual · requests a versão estável atual
Objetivo

O objetivo é demonstrar, na prática, como integrar dados de um ERP SaaS (Bluesoft) usando apenas a API oficial, carregando-os em um banco PostgreSQL local e explorando-os com o Metabase open source. Você vai entender cada elo: extração autenticada, transformação mínima, carga, consulta SQL e visualização, simulando um cenário real de BI para supermercados.

Topologia

O laboratório usa três componentes principais em uma rede local: uma máquina (ou VM) executa o extrator Python, que acessa a API do Bluesoft ERP pela internet (usando token x-CustomToken), processa os dados e insere no PostgreSQL local (192.168.56.10). O Metabase (192.168.56.20) conecta-se ao PostgreSQL para montar dashboards. O usuário interage via navegador com o Metabase.

      [Internet]
          |
  [Extrator Python]
       |      \
       |       \---[API Bluesoft ERP]
       |
[PostgreSQL 192.168.56.10]
       |
[Metabase 192.168.56.20]
       |
    [Navegador Usuário]

Equipamentos e software

ItemRequisito, licença ou versão
VM ou notebook para extrator Python1 vCPU, 2 GB RAM, acesso à internet
VM ou notebook para PostgreSQL1 vCPU, 2 GB RAM, porta 5432 aberta
VM ou notebook para Metabase2 vCPU, 4 GB RAM, porta 3000 aberta
PostgreSQLPostgreSQL License · a versão estável atual
PythonPSF License · a versão estável atual
MetabaseAGPL v3 · a versão estável atual
requestsApache 2.0 · a versão estável atual

Roteiro

  1. Preparar ambiente do PostgreSQL

    Instale o PostgreSQL na máquina 192.168.56.10. O banco será o destino dos dados extraídos. Crie o banco bi_varejo e um usuário dedicado.

    sudo apt update && sudo apt install postgresql
    sudo -u postgres psql -c "CREATE DATABASE bi_varejo;"
    sudo -u postgres psql -c "CREATE USER extrator WITH PASSWORD 'extrator123';"
    sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE bi_varejo TO extrator;"

    O que você deve ver: Banco bi_varejo criado e acessível pelo usuário extrator.

  2. Criar esquema de estudo no PostgreSQL

    Implemente o modelo de estudo com tabelas fato_venda, fato_venda_item, dim_produto, dim_cliente, dim_loja, dim_campanha. Não é o modelo do fabricante.

    psql -U extrator -d bi_varejo -h 192.168.56.10
    
    CREATE TABLE dim_produto (
      id SERIAL PRIMARY KEY,
      codigo VARCHAR(50),
      descricao VARCHAR(255)
    );
    CREATE TABLE dim_cliente (
      id SERIAL PRIMARY KEY,
      codigo VARCHAR(50),
      nome VARCHAR(255)
    );
    CREATE TABLE dim_loja (
      id SERIAL PRIMARY KEY,
      codigo VARCHAR(50),
      nome VARCHAR(255)
    );
    CREATE TABLE dim_campanha (
      id SERIAL PRIMARY KEY,
      codigo VARCHAR(50),
      nome VARCHAR(255)
    );
    CREATE TABLE fato_venda (
      id SERIAL PRIMARY KEY,
      data DATE,
      id_loja INTEGER REFERENCES dim_loja(id),
      id_cliente INTEGER REFERENCES dim_cliente(id),
      id_campanha INTEGER REFERENCES dim_campanha(id),
      valor_total NUMERIC
    );
    CREATE TABLE fato_venda_item (
      id SERIAL PRIMARY KEY,
      id_venda INTEGER REFERENCES fato_venda(id),
      id_produto INTEGER REFERENCES dim_produto(id),
      quantidade NUMERIC,
      preco_unitario NUMERIC
    );

    O que você deve ver: Tabelas criadas no banco bi_varejo.

  3. Instalar Python e dependências

    O extrator será feito em Python. Instale Python 3.x e o pacote requests.

    sudo apt update && sudo apt install python3 python3-pip
    pip3 install requests psycopg2-binary

    O que você deve ver: Python 3.x, requests e psycopg2-binary instalados.

  4. Configurar variáveis do extrator

    Crie um arquivo config.json com as credenciais do banco, token do Bluesoft e URLs dos recursos. Não coloque endpoints literais; consulte o api-docs do seu tenant.

    {
      "db_host": "192.168.56.10",
      "db_name": "bi_varejo",
      "db_user": "extrator",
      "db_pass": "extrator123",
      "token": "SEU_TOKEN_X_CUSTOMTOKEN",
      "url_produtos": "URL_RECURSO_PRODUTOS",
      "url_clientes": "URL_RECURSO_CLIENTES",
      "url_vendas": "URL_RECURSO_VENDAS"
    }

    O que você deve ver: Arquivo config.json criado com parâmetros reais.

  5. Implementar extrator Python

    Implemente um script Python que leia config.json, autentique na API do Bluesoft ERP usando x-CustomToken, extraia produtos, clientes e vendas, e insira nas tabelas. Use requests para HTTP e psycopg2 para PostgreSQL.

    Consulte a documentação de requests (https://requests.readthedocs.io/) e psycopg2 (https://www.psycopg.org/docs/).
    
    Exemplo de cabeçalho:
    headers = {'x-CustomToken': config['token']}
    
    Exemplo de requisição:
    resp = requests.get(config['url_produtos'], headers=headers)
    
    Consulte o api-docs do seu tenant para parâmetros e paginação.
    
    Exemplo de inserção:
    cur.execute('INSERT INTO dim_produto (codigo, descricao) VALUES (%s, %s)', (codigo, descricao))

    O que você deve ver: Script extrai dados da API e popula as tabelas do PostgreSQL.

  6. Executar extração inicial

    Rode o script Python para realizar a primeira carga. Observe logs e mensagens de erro.

    python3 extrator_bluesoft.py

    O que você deve ver: Mensagens indicando progresso da extração e inserção. Tabelas populadas.

  7. Instalar e configurar Metabase

    No host 192.168.56.20, instale o Metabase via Docker. O Metabase será a interface de BI.

    sudo apt update && sudo apt install docker.io
    sudo docker run -d -p 3000:3000 --name metabase metabase/metabase

    O que você deve ver: Container Metabase rodando na porta 3000.

  8. Conectar Metabase ao PostgreSQL

    No primeiro acesso ao Metabase (http://192.168.56.20:3000), configure o acesso ao banco bi_varejo usando as credenciais criadas.

    Acesse via navegador e preencha:
    Host: 192.168.56.10
    Porta: 5432
    Banco: bi_varejo
    Usuário: extrator
    Senha: extrator123

    O que você deve ver: Metabase conectado ao banco e reconhecendo as tabelas.

  9. Criar dashboards básicos

    No Metabase, crie pelo menos um dashboard com gráficos de vendas por loja, curva ABC de produtos e vendas por campanha. Use o editor visual ou SQL.

    No Metabase, clique em "Nova Consulta", selecione a tabela fato_venda, agrupe por id_loja, some valor_total, e salve como gráfico.

    O que você deve ver: Dashboards visuais mostrando os dados extraídos.

  10. Agendar extração periódica (opcional)

    Use cron (Linux) para agendar o script Python e manter os dados atualizados.

    crontab -e
    0 * * * * /usr/bin/python3 /caminho/para/extrator_bluesoft.py >> /var/log/extrator_bluesoft.log 2>&1

    O que você deve ver: Script executa automaticamente a cada hora.

Como saber que funcionou

TesteComandoCritério
Verificar tabelas populadaspsql -U extrator -d bi_varejo -h 192.168.56.10 -c "SELECT COUNT(*) FROM dim_produto;"Retorna número maior que zero.
Testar conexão Metabase-PostgreSQLNo Metabase, tente visualizar a tabela fato_venda.Tabela aparece e mostra linhas.
Visualizar dashboard de vendasNo Metabase, abra o dashboard criado.Gráficos mostram dados coerentes.
Verificar logs do extratortail -f /var/log/extrator_bluesoft.logSem erros de autenticação ou conexão.

Troubleshooting

SintomaCausa provávelCorreção
Erro de autenticação na APIToken x-CustomToken inválido ou expiradoGere novo token no ERP e atualize config.json
Conexão recusada ao PostgreSQLPostgreSQL não está ouvindo na interface correta ou firewall bloqueandoEdite postgresql.conf para listen_addresses = '*' e ajuste o pg_hba.conf; reinicie o serviço
Metabase não conecta ao bancoCredenciais ou host incorretosRevise dados de conexão e permissões do usuário
Dados ausentes ou incompletos nos dashboardsScript Python não extraiu ou inseriu corretamenteRevise logs do extrator e o mapeamento dos campos
Erro de dependência ao rodar o script PythonPacotes requests ou psycopg2 não instaladosReinstale com pip3 install requests psycopg2-binary

Segurança e hardening

  • Nunca compartilhe o token x-CustomToken fora do ambiente controlado
  • Restrinja o acesso ao banco PostgreSQL apenas aos hosts necessários
  • Use firewall para limitar acesso às portas 5432 (PostgreSQL) e 3000 (Metabase)
  • Armazene config.json com permissões restritas (chmod 600)
  • Revogue tokens não utilizados no ERP
  • Considere usar SSL/TLS nas conexões, conforme a documentação das ferramentas

Checklist final

Referências

  1. Documentação oficial da API Bluesoft ERP · Erp.bluesoft (erp.bluesoft.com.br)
  2. Documentação oficial do Metabase · Metabase (metabase.com)
  3. Documentação oficial do PostgreSQL · PostgreSQL Global Development Group (postgresql.org)
  4. Documentação oficial do requests · Requests.readthedocs (requests.readthedocs.io)
  5. Documentação oficial do Python · Python Software Foundation (docs.python.org)
Verificação editorial
Publicado
11/09/2026
Última revisão
13/09/2026
Versão do conteúdo
1.0
Referências
5 oficiais
Revisão técnica
redação e revisão por IA, URLs conferidas na publicação
Status
Atual
Encontrou um erro? Escreva para comercial@upnetix.com.br com o endereço da página. A revisão semestral por IA nunca altera comandos ou configurações sem passar pela fila de revisão.