Como Fazer ETL com Apache Hop: Guia Prático com Exemplo Visual

ETL com Apache Hop

Conteúdo do artigo

Pipeline Completo de ETL com Apache Hop

01. O que é Apache Hop?

O Apache Hop (Hop Orchestration Platform) é uma plataforma visual open source para construção de pipelines de ETL (Extract, Transform, Load).

Ela permite a orquestração de dados entre diversas fontes com interface intuitiva, baseada em “pipelines” e “workflows”.

Principais recursos:

  • Interface 100% visual baseada em componentes;
  • Totalmente modular e extensível;
  • Suporte a transformações complexas sem código.

02. Planejando seu fluxo ETL com Apache Hop

Antes de começar seu ETL com Apache Hop, defina:

  • Fonte de dados (banco, planilha, API);
  • Transformações desejadas (limpeza, filtro, join);
  • Destino dos dados (data warehouse, banco, csv);

Um bom planejamento evita retrabalho e deixa o pipeline mais limpo.

Entendendo cada uma das etapas do ETL com Apache Hop

1. Text file input no ETL com Apache Hop

A transformação Text file input é a porta de entrada para dados em formato texto (CSV, TXT, etc). Ela permite configurar o carregamento de múltiplos arquivos com padrões diferentes, como ilustrado nas imagens:

File:

Text File Input no Apache Hop - File
  • Adiciona múltiplos arquivos e define o filtro por extensão (*.CSV).
  • Cada caminho de diretório pode representar uma carteira ou tipo de contrato.

Content:

Text File Input no Apache Hop - Content
  • Define separador (;) e formato (CSV).
  • Permite configurar se existe cabeçalho, tipo de compressão, charset e layout.

Fields:

Text File Input no Apache Hop - Fileds
  • Define o schema dos dados, com tipo, posição e formato de cada campo (como nu_contrato, dias_atraso, data_vencimento).

Additional output fields:

Text File Input no Apache Hop
  • Permite registrar metadados sobre o arquivo lido, como:
    • Short filename
    • Path
    • Extension
    • URI

Esses campos são úteis para rastreabilidade ou classificação de dados no processo.

2. Step: Replace in String (Exemplo real)

Replace in String no Apache Hop

Nesta configuração, o campo carteira está sendo limpo com a seguinte lógica:

  • Campo de entrada (In stream field): carteira
  • Busca (Search): .
  • Substituição (Replace with): -
  • Use RegEx: N (não usa expressão regular)

🔍 Isso significa que toda ocorrência do ponto (.) será substituída por traço (-), uma prática comum ao padronizar nomes de arquivos, IDs ou pastas.

Exemplo prático:

  • Valor original: NDI.SP.PAD
  • Resultado após a transformação: NDI-SP-PAD

💡 Dica:
Se quiser remover o ponto ao invés de trocar por hífen, deixe o campo Replace with em branco.

3. Strings cut

Strings cut no Apache Hop

Essa etapa é usada para recortar partes específicas de uma string com base em posições fixas, como se estivesse usando substring().

Configuração apresentada:

Campo de entradaCampo de saídaDe (posição)Até (posição)
carteiradata_base1323
carteirames_base1623

🔍 Objetivo:
Extrair partes da string carteira que representam informações temporais, como data e mês, com base na posição dos caracteres.

Exemplo prático:

  • Valor do campo carteira: CCG.PJ.BASE_2024-06
  • Resultado:
    • data_base2024-06
    • mes_base06

💡 Dica:

As posições são baseadas em index 1, ou seja, o primeiro caractere da string é posição 1 (não 0 como em muitas linguagens).

  • Use esse método apenas quando as posições forem sempre fixas. Para estruturas mais dinâmicas, use Split Fields ou Regex Evaluation.

4. Replace base (Replace in string)

Replace in string no Apache Hop

Nesta etapa, o objetivo é limpar e padronizar campos com caracteres inadequados antes da transformação e carga. Isso garante a integridade dos dados para uso posterior.

Configurações visíveis:

CampoSubstituir SearchPor Replace with
cpf/cnpj=(nada)
cpf/cnpj"(nada)
valor"'
contrato"(nada)
data_base./
data_base-/
mes_base-/

Objetivo de cada substituição:

cpf/cnpj: Remove caracteres estranhos como = ou aspas, comuns em arquivos CSV exportados de Excel ou sistemas legados.

  • valor: Substitui aspas por apóstrofo ' para evitar quebra de leitura numérica.
  • contrato: Elimina aspas, limpando o valor.
  • data_base e mes_base: Converte . e - para / para padronizar as datas no formato dd/MM/yyyy ou MM/yyyy.

💡 Dica prática:
Se você estiver preparando os dados para escrita em banco de dados ou geração de relatório, padronizar datas e campos de chave como CPF/CNPJ é essencial para evitar erros de validação.

5. JavaScript (Classificação por tipo de arquivo)

JavaScript (Classificação por tipo de arquivo) no Apache Hop

Essa etapa usa JavaScript interno do Apache Hop para:

  1. Normalizar caminhos de diretório;
  2. Extrair o sufixo do nome da base;
  3. Classificar o tipo da base como PF, PJ, VC ou OUTRO.

🔍 Código explicando cada parte:

javascriptCopiarEditar// Remove espaços e normaliza a barra
var caminho = tipo.trim().replace(/\\/g, "/");

// Extrai o último segmento após a última barra
var partes = caminho.split("/");
var sufixo = partes[partes.length - 1];

// Classificação baseada no final do caminho
if (sufixo == "PJ") {
  tipo_classificado = "PJ";
} else if (sufixo == "PF") {
  tipo_classificado = "PF";
} else if (sufixo == "PAD") {
  tipo_classificado = "VC";
} else {
  tipo_classificado = "OUTRO";
}

📌 Saídas geradas:

  • caminho – o caminho original limpo;
  • partes – array com segmentos do caminho;
  • sufixo (renomeado para tipo) – resultado da classificação: "PJ", "PF", "VC" ou "OUTRO".

💡 Dica de melhoria:

Você pode encapsular essa lógica em um “User Defined Java Class” se quiser manter seu código reutilizável e com mais segurança de tipagem.

Treinamento: Pentaho + AWS

6. Number range (Faixa de atraso)

Number range no Apache Hop

Essa transformação é utilizada para classificar um campo numérico em categorias, com base em faixas definidas de valores.

⚙️ Configuração apresentada:

  • Input field: dias_atraso
  • Output field: faixa_atraso_bases
  • Default (sem faixa correspondente): Maior que um ano

📊 Faixas configuradas:

Limite InferiorLimite SuperiorValor de saída
-99994Menor que 5
5115 a 10
113111 a 30
316131 a 60
619161 a 90
9112191 a 120
121151121 a 150
151181151 a 180
181366181 a 365
Acima de 365Maior que um ano (default)

✅ Aplicações práticas:

  • Permite segmentar clientes por perfil de cobrança;
  • Facilita filtros condicionais em “Switch/Case” ou relatórios;
  • Pode ser usada para aplicar mensagens diferentes por e-mail/SMS.

💡 Dica:
Evite sobreposição nas faixas (ex: 11-31 e 31-61) para garantir precisão e evitar duplicidades no mapeamento.

7. Table input (Leitura do banco de dados)

Table input no Apache Hop

Essa etapa é usada para consultar diretamente uma tabela ou view de um banco de dados relacional, retornando os dados como input para o fluxo ETL.

⚙️ Configuração atual:

  • Conexão: DBNNC (nome da conexão configurada previamente)
  • Consulta SQL:
sqlCopiarEditarSELECT
  data_base,
  mes_base,
  remessa,
  nu_obrigacao,
  vencimento,
  valor,
  dias_atraso,
  contrato,
  empresa_plano,
  tipo,
  filial,
  faixa_atraso_bases,
  cpf_cnpj
FROM hapvida_pa_fixa.f_bases
WHERE data_base >= NOW() - INTERVAL '3 months' -- Filtro para os últimos 3 meses
ORDER BY data_base;

🔍 Objetivo da consulta:

  • Buscar registros recentes (últimos 3 meses) da tabela f_bases;
  • Trazer colunas já tratadas como faixa_atraso_bases, dias_atraso e tipo;
  • Evitar sobrecarga de dados antigos ou irrelevantes para ações de cobrança.

✅ Boas práticas:

  • Use LIMIT se o volume for muito alto e você estiver testando;
  • Utilize comentários (--) para documentar filtros críticos;
  • Prefira views otimizadas com índices quando possível.

8. Merge rows (diff)

Merge rows no Apache Hop

Essa etapa é usada para comparar duas versões de um mesmo conjunto de dados — pois geralmente o “banco” (dados atuais salvos) versus “staging” (dados novos) — e identificar diferenças.

⚙️ Configuração:

  • Reference rows origin: Select dw → Dados do banco (referência)
  • Compare rows origin: Select stg → Dados novos (provenientes do processamento)
  • Flag field name: flagfield → Campo de saída com o tipo de alteração

🧩 Chaves de comparação (Keys to match):

Campos usados para identificar registros únicos:

  • data_base, mes_base, remessa, nu_obrigacao, cpf_cnpj, etc.

🧪 Valores comparados (Values to compare):

Campos cujas alterações serão detectadas:

  • Ex.: valor, dias_atraso, empresa_plano, faixa_atraso_bases

🏷️ Saídas possíveis do campo flagfield:

  • "identical" → Sem alterações;
  • "new" → Registro novo na base de staging;
  • "changed" → Algum campo de valor mudou;
  • "deleted" → Presente no banco, mas ausente na base nova (opcional).

💡 Aplicações comuns:

  • Evitar sobrescrita desnecessária no banco;
  • Acionar lógicas diferentes no fluxo (Switch/Case);
  • Gerar logs ou auditoria com registros alterados.

9. Switch / Case (Direcionamento por status de atualização)

Switch / Case (Direcionamento por status de atualização) no Apache Hop

Essa etapa é usada para encaminhar os dados para diferentes caminhos, com base no valor de um campo de controle — neste caso, o flagfield gerado pelo Merge rows (diff).

⚙️ Configuração:

Field name to switch: flagfield

  • Valores de decisão (Case values):
    • "new" → encaminha para Table output (inserção de novos registros)
    • "changed" → encaminha para Update (atualização dos existentes)

✅ Como funciona na prática:

  • Cada registro será roteado automaticamente conforme seu status:
    • Se for novo → insere no banco.
    • Se tiver mudado → executa atualização.
    • Outros (como "identical") podem ser ignorados ou tratados no Default target transform.

💡 Dica:

Use Switch/Case sempre que quiser ramificar a lógica do seu pipeline com base em valores dinâmicos, mantendo o fluxo limpo e modular.

10. Finalizando o fluxo ETL: Etapas de gravação

Step: Table Output (Inserção de novos registros)

Table Output (Inserção de novos registros) no Apache Hop

Esta transformação insere novos dados no banco, mais especificamente na tabela stg_bases, no schema hapvida_pa_fixa.

⚙️ Configuração:

  • Conexão: DBNNC
  • Target table: stg_bases
  • Commit size: 1000 (ótimo para desempenho sem travar o banco)
  • Specify database fields: ✔️ (garante o mapeamento direto e explícito)

📝 Mapeamento:

Todos os campos são inseridos diretamente conforme vieram do fluxo — por exemplo:

  • valor, dias_atraso, empresa_plano, faixa_atraso_bases, etc.

✅ Ideal para dados que ainda não existem na base.

Step: Update (Atualização de dados existentes)

Step: Update (Atualização de dados existentes) no Apache Hop

Essa etapa atualiza os registros que já existem na stg_bases, comparando pelas chaves:

🔑 Chaves de busca:

  • nu_obrigacao
  • contrato
  • mes_base
  • tipo

Esses campos definem unicamente cada linha a ser atualizada.

🔁 Campos atualizados:

  • valor, dias_atraso, empresa_plano, faixa_atraso_bases, entre outros.

💡 Atualizações são ideais para manter os dados atualizados sem duplicar registros.


Com isso, o ciclo ETL está completo: leitura de base, limpeza, classificação, comparação e persistência inteligente.

Conclusão

Apache Hop é uma ferramenta robusta e acessível para quem busca automatizar processos de ETL com segurança e visibilidade. Com um pouco de planejamento e organização, é possível montar pipelines complexos de forma intuitiva.

Experimente criar seu primeiro fluxo hoje e descubra como o Apache Hop pode revolucionar o tratamento dos seus dados.

Treinamento: Pentaho + AWS

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Torne suas tomadas de decisão mais rápidas e precisas com relatórios em Power BI