Ir para o conteúdo

ETL em 5 Minutos

Este guia te levará do zero até ter seu primeiro ETL funcionando em menos de 5 minutos.

O que vamos alcançar

Transferir dados de um banco MySQL para Google Sheets automaticamente.

graph LR
    A[MySQL Database] --> B[Fracttal ETL Hub] --> C[Google Sheets]
    A --> D[Tabela Orders]
    B --> E[Transform Layer]
    B --> F[Validation Engine]
    C --> G[Planilha Atualizada]

    classDef database fill:#e3f2fd,stroke:#1976d2,stroke-width:3px,color:#1565c0
    classDef etl fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px,color:#6a1b9a
    classDef target fill:#e8f5e8,stroke:#388e3c,stroke-width:3px,color:#2e7d32

    class A,D database
    class B,E,F etl
    class C,G target

Pré-requisitos (1 minuto)

Antes de começar, certifique-se de ter:

  • Acesso ao Hub ETL (solicite credenciais ao seu administrador)
  • Banco de dados com tabela de exemplo
  • Google Sheets conta com permissões de escrita

!!! tip "Não tem dados de teste?" Você pode usar nosso sandbox com dados demo. Pule para exemplo com sandbox.


Passo 1: Configuração Básica (1 minuto)

Estrutura mínima do ETL

meu-primeiro-etl.json
{
  "id": "12345678-1234-1234-1234-123456789abc",
  "jsonrpc": "2.0",
  "method": "etl.etl_update",
  "params": {
    "id": "meu-primeiro-etl",
    "config": {
      "source": {
        "id_type": 1,
        "host": "localhost",
        "port": 3306,
        "database": "ecommerce",
        "username": "etl_user",
        "password": "senha_segura",
        "form": {
          "sql": "SELECT order_id, customer_name, total, order_date FROM orders WHERE order_date >= '2024-01-01'"
        }
      }
    }
  }
}

Passo 2: Adicionar Transformação (1 minuto)

Formatar dados para Google Sheets

secao-transform
"transform": [
  {
    "format_date": {
      "field": "order_date",
      "input_format": "%Y-%m-%d %H:%M:%S",
      "output_format": "%d/%m/%Y"
    }
  },
  {
    "rename": {
      "order_id": "ID Pedido",
      "customer_name": "Cliente",
      "total": "Valor",
      "order_date": "Data"
    }
  }
]

Passo 3: Configurar Destino (1 minuto)

Destino Google Sheets

secao-target
"target": {
  "id_type": 10,
  "credentials_path": "/caminho/para/google-credentials.json",
  "form": {
    "spreadsheet_id": "1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms",
    "range": "Planilha1!A1",
    "value_input_option": "RAW"
  }
}

Passo 4: Configuração Completa (30 segundos)

ETL completo pronto para executar

config-etl-completa.json
{
  "id": "12345678-1234-1234-1234-123456789abc",
  "jsonrpc": "2.0",
  "method": "etl.etl_update",
  "params": {
    "id": "pedidos-para-sheets",
    "config": {
      "source": {
        "id_type": 1,
        "host": "localhost",
        "port": 3306,
        "database": "ecommerce",
        "username": "etl_user",
        "password": "senha_segura",
        "form": {
          "sql": "SELECT order_id, customer_name, total, order_date FROM orders WHERE order_date >= CURDATE() - INTERVAL 7 DAY"
        }
      },
      "transform": [
        {
          "format_date": {
            "field": "order_date",
            "input_format": "%Y-%m-%d %H:%M:%S",
            "output_format": "%d/%m/%Y"
          }
        },
        {
          "rename": {
            "order_id": "ID Pedido",
            "customer_name": "Cliente",
            "total": "Valor",
            "order_date": "Data"
          }
        }
      ],
      "target": {
        "id_type": 10,
        "credentials_path": "/credentials/google-sheets.json",
        "form": {
          "spreadsheet_id": "1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms",
          "range": "Planilha1!A1",
          "value_input_option": "RAW"
        }
      }
    }
  }
}

Passo 5: Executar (30 segundos)

Enviar configuração para ETL Hub

curl -X POST http://seu-etl-hub:8080/jsonrpc \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer seu-api-token" \
  -d @config-etl-completa.json

Resposta esperada

{
  "jsonrpc": "2.0",
  "result": {
    "status": "success",
    "message": "ETL pedidos-para-sheets criado com sucesso",
    "execution_id": "exec_987654321"
  },
  "id": "12345678-1234-1234-1234-123456789abc"
}

Verificação (30 segundos)

Verificar seu Google Sheets

  1. Abrir sua planilha no Google Sheets
  2. Verificar dados aparecem na Planilha1
  3. Verificar formatação - datas devem estar DD/MM/AAAA

Resultado esperado

ID Pedido Cliente Valor Data
1001 João Silva 299,99 25/01/2024
1002 Maria Santos 156,50 26/01/2024

Demo Sandbox

Use nosso ambiente de teste

Se você não tem seus próprios dados, use nosso sandbox:

config-sandbox.json
{
  "id": "demo-12345",
  "jsonrpc": "2.0",
  "method": "etl.etl_update",
  "params": {
    "id": "demo-sandbox",
    "config": {
      "source": {
        "id_type": 1,
        "host": "demo.fracttal.com",
        "port": 3306,
        "database": "loja_demo",
        "username": "usuario_demo",
        "password": "senha_demo",
        "form": {
          "sql": "SELECT * FROM pedidos_exemplo LIMIT 10"
        }
      },
      "target": {
        "id_type": 10,
        "credentials_path": "/demo/credentials.json",
        "form": {
          "spreadsheet_id": "id_planilha_demo",
          "range": "Demo!A1"
        }
      }
    }
  }
}

Solução de Problemas

Problemas comuns nos primeiros 5 minutos

Falha na conexão do banco

Erro: Conexão recusada para localhost:3306
Solução: Verificar host, porta e credenciais.

Permissão negada no Google Sheets

Erro: 403 Permissões insuficientes
Solução: Verificar se a conta de serviço tem acesso de edição à planilha.

Sintaxe SQL inválida

Erro: Erro de sintaxe SQL próximo a 'SELCT'
Solução: Verificar sintaxe da consulta SQL.


Próximos Passos

Parabéns! Você criou seu primeiro ETL em 5 minutos.

O que explorar a seguir:

  1. Transformações Avançadas - Mais operadores de processamento
  2. Múltiplos Destinos - Enviar para múltiplos destinos
  3. Agendamento - Automatizar execução
  4. Tratamento de Erros - Lidar com falhas elegantemente

Caminho de aprendizado:


Precisa de ajuda? Confira nosso Hub de Solução de Problemas ou contate o suporte.