Deduplicación y QUALIFY

Objetivo

Eliminar duplicados con una regla determinista.

Explicación

Deduplicar no es hacer DISTINCT a ciegas. Debes definir la clave lógica y qué registro conservar. En Snowflake, QUALIFY permite filtrar directamente el resultado de una window function. En un equipo de datos, SQL no se evalúa sólo por devolver filas: debe responder una pregunta de negocio, conservar el grain correcto y permitir que otra persona valide el resultado. Esta práctica usa el ecommerce del curso para obligarte a reconciliar conteos y totales, igual que harías antes de publicar una métrica en un dashboard. Para trabajar Deduplicación y QUALIFY 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: Una fila por customer_id y siempre el mismo registro ante reejecuciones. La verificación principal será: GROUP BY customer_id HAVING COUNT(*)>1 debe devolver cero tras deduplicar. Si no puedes explicar por qué pasa esa comprobación, vuelve al paso anterior antes de continuar.

Contexto profesional

En un equipo de datos, SQL no se evalúa sólo por devolver filas: debe responder una pregunta de negocio, conservar el grain correcto y permitir que otra persona valide el resultado. Esta práctica usa el ecommerce del curso para obligarte a reconciliar conteos y totales, igual que harías antes de publicar una métrica en un dashboard.

Ejemplo real

SELECT *
FROM customer_updates
QUALIFY ROW_NUMBER() OVER(PARTITION BY customer_id ORDER BY updated_at DESC)=1;

Archivos o datos de entrada

  • data/ecommerce_customers.csv
  • data/ecommerce_orders.csv

Práctica guiada

Crea una tabla de actualizaciones duplicadas y conserva la más reciente.

Laboratorio paso a paso

  • Prepara el entorno y localiza los datos/archivos de entrada: data/ecommerce_customers.csv, 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 «Deduplicación y QUALIFY».
  • Ejecuta la práctica guiada: Crea una tabla de actualizaciones duplicadas y conserva la más reciente. Documenta el comando, consulta o acción exacta y el resultado obtenido.
  • Resuelve el reto sin mirar la solución: Añade un empate en updated_at y decide un segundo criterio determinista. Si falla, registra el mensaje de error y formula una hipótesis antes de cambiar código.
  • Compara tu resultado con el criterio esperado: Una fila por customer_id y siempre el mismo registro ante reejecuciones. Después ejecuta la comprobación: GROUP BY customer_id HAVING COUNT(*)>1 debe devolver cero tras deduplicar.
  • Provoca deliberadamente un caso problemático relacionado con este error frecuente: Usar DISTINCT no decide qué versión de una entidad conservar.. Comprueba que sabes detectarlo y corregirlo.

Reto sin ayuda

Añade un empate en updated_at y decide un segundo criterio determinista.

Resultado esperado

Una fila por customer_id y siempre el mismo registro ante reejecuciones.

Cómo verificarlo

GROUP BY customer_id HAVING COUNT(*)>1 debe devolver cero tras deduplicar.

Checklist de validación

  • El resultado cumple: Una fila por customer_id y siempre el mismo registro ante reejecuciones.
  • Has ejecutado esta verificación y puedes explicar el resultado: GROUP BY customer_id HAVING COUNT(*)>1 debe devolver cero tras deduplicar.
  • 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

Añade otra columna estable al ORDER BY para resolver empates.

Solución paso a paso

1) Empieza reproduciendo el caso base con los datos indicados. 2) Aplica esta estrategia específica: ORDER BY updated_at DESC, ingestion_id DESC. 3) Usa como referencia técnica el ejemplo de la lección (SELECT * FROM customer_updates QUALIFY ROW_NUMBER() OVER(PARTITION BY customer_id ORDER BY updated_at DESC)=1;). 4) Ejecuta la verificación: GROUP BY customer_id HAVING COUNT(*)>1 debe devolver cero tras deduplicar. 5) Compara con el resultado esperado: Una fila por customer_id y siempre el mismo registro ante reejecuciones. 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 «Usar DISTINCT no decide qué versión de una entidad conservar.», corrige la causa antes de continuar; no ocultes el fallo ni cambies el resultado esperado para que la prueba pase.

Errores frecuentes

  • Usar DISTINCT no decide qué versión de una entidad conservar.

Qué debes recordar

Debes poder explicar qué filas produce la consulta y por qué.

Preguntas de entrevista

  • ¿Cómo demostrarías que una consulta no está duplicando métricas? Aplícalo concretamente a «Deduplicación y QUALIFY».
  • ¿Qué comprobaciones harías antes de publicar este resultado a negocio? Explica qué evidencia enseñarías al revisor.

Siguiente paso

Pasarás a métricas analíticas como cohortes y retención.

Recursos de esta lección

Quiz de la lección

¿Qué necesita una deduplicación robusta?

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.