Sincronizando o warehouse com os seus próprios sistemas
Se você se conecta via JDBC/ODBC para replicar os dados do warehouse no seu próprio banco de dados ou lake, você não precisa de re-downloads completos periódicos. Todas as tabelas expõemsynced_at — o momento em que cada linha foi gravada ou corrigida pela última vez — projetado exatamente para extração incremental.
O padrão
Mantenha um watermark (T_prev) por tabela no seu sistema e, a cada ciclo de sincronização:
Por que cada passo importa
- Congele
Tuma única vez (passo 1). Usarnow()dentro das suas queries faz com que cada página de uma extração longa veja um instante diferente. Congelar um único timestamp torna a extração inteira um snapshot consistente. - UPSERT, nunca INSERT cego (passo 3). Quando o warehouse corrige uma linha (um status de entrega chega, um id de CRM atrasado aparece), ele reemite a mesma chave de negócio com um
synced_atnovo. Um upsert substitui a sua versão desatualizada; um insert cego a duplicaria. A chave de cada tabela é sua coluna*_id(session_id,message_id,deployment_id, …). - Substitua a janela quente (passo 4). Em casos raros, uma linha pode desaparecer de uma tabela (por exemplo, uma duplicata criada por uma correção interna sendo limpa). Uma query pode retornar o que existe — ela não pode te dizer o que deixou de existir. Re-extrair uma janela recente curta por data do evento (
created_at/scheduled_at) e substituir essa fatia na sua cópia garante que seus dados batam com os nossos, incluindo remoções. Três dias é uma janela confortável; todas as correções acontecem em até 48 horas.
Ciclo de referência (exemplo: envios de campanha)
Carga inicial
A primeira sincronização é o mesmo mecanismo comT_prev em zero: extraia tudo com synced_at <= T, em blocos delimitados por data se a tabela for grande, e então comece a ciclar. Sem caso especial.
O que não fazer
- Não re-baixe o histórico de forma programada — dados consolidados (com mais de 48 horas) são imutáveis; re-extraí-los é puro custo.
- Não construa cortes a partir do seu próprio relógio — sempre compare contra valores de
synced_atlidos do warehouse. - Não pule o upsert — correções são um recurso, não uma anomalia; sua cópia deve absorvê-las.