MERGE / upsert e idempotencia

Objetivo

Aplicar inserts y updates sin duplicar claves.

Explicación

MERGE compara origen y destino por una clave. WHEN MATCHED actualiza; WHEN NOT MATCHED inserta. La fuente debe estar deduplicada por la clave elegida antes del MERGE. Los pipelines reales fallan, se reejecutan y reciben datos tardíos. Por eso la práctica no termina cuando “funciona una vez”: debes pensar en idempotencia, reconciliación, registros inválidos y evidencia suficiente para diagnosticar un fallo sin adivinar. Para trabajar MERGE / upsert e idempotencia de forma profesional, no te quedes con el ejemplo: identifica la entrada, ejecuta el caso base, provoca al menos un caso incorrecto y compara el resultado con un control independiente. En este laboratorio el criterio de salida es concreto: La segunda ejecución no cambia el número de filas ni crea duplicados. La verificación principal será: COUNT(*) = COUNT(DISTINCT order_id). Si no puedes explicar por qué pasa esa comprobación, vuelve al paso anterior antes de continuar.

Contexto profesional

Los pipelines reales fallan, se reejecutan y reciben datos tardíos. Por eso la práctica no termina cuando “funciona una vez”: debes pensar en idempotencia, reconciliación, registros inválidos y evidencia suficiente para diagnosticar un fallo sin adivinar.

Ejemplo real

MERGE INTO target t USING source s ON t.order_id=s.order_id
WHEN MATCHED THEN UPDATE SET amount=s.amount,status=s.status
WHEN NOT MATCHED THEN INSERT (order_id,amount,status) VALUES(s.order_id,s.amount,s.status);

Archivos o datos de entrada

  • data/ecommerce_orders.csv

Práctica guiada

Crea target con 3 pedidos y source con 1 update + 1 nuevo.

Laboratorio paso a paso

  • Prepara el entorno y localiza los datos/archivos de entrada: data/ecommerce_orders.csv. Antes de modificar nada, anota el número de filas, columnas u objetos que esperas usar.
  • Reproduce el ejemplo real de la lección y guarda la salida. No avances hasta poder explicar qué hace cada bloque relacionado con «MERGE / upsert e idempotencia».
  • Ejecuta la práctica guiada: Crea target con 3 pedidos y source con 1 update + 1 nuevo. Documenta el comando, consulta o acción exacta y el resultado obtenido.
  • Resuelve el reto sin mirar la solución: Ejecuta MERGE dos veces. Si falla, registra el mensaje de error y formula una hipótesis antes de cambiar código.
  • Compara tu resultado con el criterio esperado: La segunda ejecución no cambia el número de filas ni crea duplicados. Después ejecuta la comprobación: COUNT(*) = COUNT(DISTINCT order_id).
  • Provoca deliberadamente un caso problemático relacionado con este error frecuente: MERGE contra source duplicada puede ser ambiguo o producir resultados inesperados.. Comprueba que sabes detectarlo y corregirlo.

Reto sin ayuda

Ejecuta MERGE dos veces.

Resultado esperado

La segunda ejecución no cambia el número de filas ni crea duplicados.

Cómo verificarlo

COUNT(*) = COUNT(DISTINCT order_id).

Checklist de validación

  • El resultado cumple: La segunda ejecución no cambia el número de filas ni crea duplicados.
  • Has ejecutado esta verificación y puedes explicar el resultado: COUNT(*) = COUNT(DISTINCT order_id).
  • Has probado al menos un caso límite o dato inválido y el comportamiento es explícito, no silencioso.
  • Puedes repetir la práctica desde cero sin copiar la solución y dejar evidencia (consulta, commit, captura o salida de consola).
Pista específica

Primero deduplica source si puede repetir order_id.

Solución paso a paso

1) Empieza reproduciendo el caso base con los datos indicados. 2) Aplica esta estrategia específica: Usa ROW_NUMBER por order_id antes del MERGE. 3) Usa como referencia técnica el ejemplo de la lección (MERGE INTO target t USING source s ON t.order_id=s.order_id WHEN MATCHED THEN UPDATE SET amount=s.amount,status=s.status WHEN NOT MATCHED THEN INSERT (order_id,amount,status) VALUES(s.order_id,s.amount,s.status);). 4) Ejecuta la verificación: COUNT(*) = COUNT(DISTINCT order_id). 5) Compara con el resultado esperado: La segunda ejecución no cambia el número de filas ni crea duplicados. 6) Repite el reto cambiando un dato o condición para demostrar que entiendes el comportamiento y no has obtenido el resultado por casualidad. Si aparece el error «MERGE contra source duplicada puede ser ambiguo o producir resultados inesperados.», corrige la causa antes de continuar; no ocultes el fallo ni cambies el resultado esperado para que la prueba pase.

Errores frecuentes

  • MERGE contra source duplicada puede ser ambiguo o producir resultados inesperados.

Qué debes recordar

Un pipeline fiable puede reejecutarse, detectar errores y explicar qué hizo.

Preguntas de entrevista

  • ¿Cómo harías este proceso idempotente? Aplícalo concretamente a «MERGE / upsert e idempotencia».
  • ¿Qué registrarías para poder reanudar o investigar una ejecución fallida? Explica qué evidencia enseñarías al revisor.

Siguiente paso

Añadirás validación y manejo de errores.

Recursos de esta lección

Quiz de la lección

¿Qué debe cumplir la clave usada en el MERGE?

Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.