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
Preparando contenido…
Quiz de la lección
¿Qué debe cumplir la clave usada en el MERGE?