Sincronizar el warehouse hacia tus propios sistemas
Si te conectas vía JDBC/ODBC para replicar los datos del warehouse en tu propia base de datos o lake, no necesitas re-descargas completas periódicas. Todas las tablas exponensynced_at — el momento en que cada fila fue escrita o corregida por última vez — diseñado exactamente para la extracción incremental.
El patrón
Mantén un watermark (T_prev) por tabla en tu sistema, y en cada ciclo de sincronización:
Por qué importa cada paso
- Congela
Tuna sola vez (paso 1). Usarnow()dentro de tus consultas hace que cada página de una extracción larga vea un instante distinto. Congelar un solo timestamp convierte toda la extracción en un snapshot consistente. - UPSERT, nunca INSERT ciego (paso 3). Cuando el warehouse corrige una fila (llega un estado de entrega, aterriza un id de CRM tardío), reemite la misma clave de negocio con un
synced_atnuevo. Un upsert reemplaza tu versión desactualizada; un insert ciego la duplicaría. La clave de cada tabla es su columna*_id(session_id,message_id,deployment_id, …). - Reemplaza la ventana caliente (paso 4). En casos raros una fila puede desaparecer de una tabla (por ejemplo, un duplicado creado por una corrección interna que se limpia). Una consulta puede devolver lo que existe — no puede decirte qué dejó de existir. Volver a traer una ventana reciente corta por fecha de evento (
created_at/scheduled_at) y reemplazar ese segmento en tu copia garantiza que tus datos coincidan con los nuestros, incluidas las eliminaciones. Tres días es una ventana cómoda; todas las correcciones ocurren dentro de 48 horas.
Ciclo de referencia (ejemplo: envíos de campaña)
Carga inicial
La primera sincronización es el mismo mecanismo conT_prev en cero: trae todo con synced_at <= T, en bloques acotados por fecha si la tabla es grande, y luego empieza a ciclar. Sin casos especiales.
Qué no hacer
- No re-descargues la historia de forma programada — los datos consolidados (de más de 48 horas) son inmutables; volver a traerlos es puro costo.
- No construyas cortes con tu propio reloj — compara siempre contra valores de
synced_atleídos del warehouse. - No te saltes el upsert — las correcciones son una característica, no una anomalía; tu copia debe absorberlas.