Una marca de agua guarda hasta dónde llegó una carga para leer solo cambios posteriores. El patrón reduce trabajo, pero puede perder filas si el campo no avanza de forma fiable, hay relojes desalineados o se actualiza el cursor antes de confirmar el destino.
Microsoft describe la carga incremental como la copia entre una marca anterior y una nueva. La seguridad del patrón depende de cómo se eligen, persisten y vuelven a procesar esos límites.
Requisitos de una buena columna
Una marca debería:
- actualizarse en cada inserción y modificación relevante;
- tener orden estable y precisión suficiente;
- proceder del sistema origen, no del reloj del pipeline;
- permitir resolver empates con una segunda clave;
- permanecer consultable durante reintentos.
Un ID creciente captura altas, pero no actualizaciones. Un updated_at editable puede retroceder. Una fecha con precisión de segundos puede compartir valor entre miles de filas. Usa un cursor compuesto como (updated_at, primary_key) cuando proceda.
Fija el límite superior
Al comenzar, lee una marca superior H del origen. Después copia:
(old_watermark, H]
No persigas continuamente “ahora” durante una ejecución: el conjunto cambia y dificulta demostrar completitud. Avanza la marca guardada a H solo cuando escritura y validación hayan terminado. Si falla, la siguiente ejecución repite el intervalo mediante un upsert idempotente.
Ventana solapada
Para actualizaciones tardías, vuelve a leer un margen anterior:
(old_watermark - 2 horas, H]
El solapamiento no debe duplicar resultados; el destino necesita clave estable y regla de actualización. Dimensiona la ventana con la distribución real de retrasos y monitoriza cuántos cambios aparecen fuera. No conviertas “dos horas” en una constante eterna sin evidencia.
Actualizaciones retroactivas y borrados
Una corrección que no modifica la marca queda invisible. Verifica el comportamiento del origen. Para borrados físicos, una consulta por watermark no devuelve la fila eliminada; necesitas CDC, tombstones, auditoría del origen o reconciliación periódica.
Microsoft Fabric distingue watermark y CDC: CDC encaja cuando se requieren inserciones, actualizaciones y borrados o una réplica más continua; watermark cuando existe una columna fiable y bastan altas y cambios.
Controles de completitud
Por intervalo conserva:
- límites inferior y superior;
- filas leídas, insertadas, actualizadas y rechazadas;
- mínimo y máximo observados;
- firma o agregados por partición;
- marca persistida tras el commit;
- latencia de cambios tardíos.
Programa reconciliaciones contra el origen por periodos cerrados. Una suma y recuento ayudan, pero no detectan todos los cambios compensados; usa claves o hashes cuando el riesgo lo justifique.
Relaciona el proceso con el backfill histórico y la idempotencia. El mismo diseño debe permitir reconstruir un intervalo sin corromper lo ya cargado.
Una marca de agua no garantiza incrementalidad correcta. La garantía aparece al combinar cursor fiable, límite estable, persistencia posterior al éxito, escritura idempotente y reconciliación de lo que el cursor no puede representar.