O que Construção de Pipelines de Ingestão faz?
Quando usar
- Extraindo de bancos de dados, APIs, arquivos ou SaaS para um warehouse/lago.
- Projetando extração incremental, marcas d'água ou CDC.
- Lidando com paginação de API, limites de taxa e tentativas.
- Decidindo entre EL gerenciado (Fivetran/Airbyte) vs código personalizado.
- NÃO use para transformar dados já carregados (use habilidades dbt/Spark).
Fluxo de Trabalho
- [ ] Decidir modo de extração: snapshot completo vs incremental vs CDC
- [ ] Escolher uma marca d'água confiável (updated_at, LSN/binlog, sequência)
- [ ] Armazenar dados brutos de forma imutável (append) e transformar downstream
- [ ] Tornar a carga idempotente (upsert/sobrescrita de partição por chave)
- [ ] Lidar com paginação, limites de taxa, tentativas e dados atrasados
- Escolha o modo. Recarga completa (tabelas pequenas/dimensão), incremental por uma marca d'água (a maioria das tabelas fato) ou CDC (OLTP de alto volume onde você precisa de exclusões e cada alteração).
- Escolha uma marca d'água confiável.
updated_atsó funciona se a fonte sempre o atualizar; caso contrário, use posições de log do banco (LSN/binlog/SCN) ou uma sequência monotônica. Armazene a última marca d'água e retome a partir dela. - Armazene dados brutos de forma imutável. Anexe extratos brutos (bronze) com metadados de carga; faça transformações downstream para poder reproduzir sem extrair novamente da fonte.
- Carga idempotente. Faça upsert por chave natural ou sobrescreva a partição, para que
tentativas e sobreposições não dupliquem dados (veja
writing-idempotent-transformations). - Seja robusto quanto a paginação, limites de taxa e dados atrasados.
Padrões
Extração incremental com janela de sobreposição para dados atrasados:
-- Extraia uma pequena janela de sobreposição além da última marca d'água para capturar atualizações atrasadas,
-- depois faça upsert por chave para que a sobreposição não crie duplicatas.
SELECT * FROM source.orders
WHERE updated_at >= :ultima_marca_dagua - INTERVAL '3 dias';
CDC — leia o log do banco (Debezium/nativo) para capturar inserções, atualizações e exclusões (que a extração baseada em marca d'água não detecta). Aplique as alterações com MERGE, usando a posição de confirmação da alteração para ordenação.
Paginação de API + limites de taxa — siga tokens de cursor/próxima página; faça backoff e repetição em caso de 429/5xx com backoff exponencial e jitter; marque o progresso para que uma falha retome no meio do fluxo.
Gerenciado vs personalizado — use Fivetran/Airbyte para conectores padrão (eles lidam com mudança de esquema, estado incremental, tentativas); escreva código personalizado apenas para fontes incomuns ou quando houver necessidade de controle/baixo custo.
Armadilhas comuns
- Marca d'água
updated_atquando a fonte não a define de forma confiável — perde linhas silenciosamente; valide ou mude para CDC baseado em log. - Sem janela de sobreposição — atualizações tardias são perdidas entre execuções.
- Extração baseada em marca d'água esperando exclusões — não pode vê-las; use CDC ou reconciliação completa periódica.
- Transformar durante a extração — impossibilita reprodução; armazene dados brutos primeiro.
- Ignorar limites de taxa ou casos extremos de paginação — extrações parciais que parecem completas; marque e verifique contagens.
- Carga não idempotente — tentativas e janelas de sobreposição duplicam linhas.