Las entrevistas para ingeniero de datos evalúan tres cosas: SQL, cómo diseñas y ejecutas pipelines de datos, y cómo razonas sobre escala y fallos. A continuación tienes 20 preguntas con respuestas que puedes adaptar, en el orden en que los candidatos suelen encontrárselas. Los ejemplos de SQL se ejecutaron contra una pequeña base de datos de muestra antes de publicar, y los resultados mostrados son la salida real.
Preguntas de SQL
1. Encuentra el segundo salario más alto en cada empresa o en el conjunto total
Usa DENSE_RANK, para que los empates compartan rango y "segundo más alto" signifique el segundo valor distinto.
SELECT name, salary
FROM (
SELECT name, salary, DENSE_RANK() OVER (ORDER BY salary DESC) AS r
FROM employees
) t
WHERE r = 2;
En una tabla con salarios 150, 130, 130, 110, 90, 70, esto devuelve a las dos personas que cobran 130. Explica por qué elegiste DENSE_RANK en lugar de RANK (que salta números después de los empates) y ROW_NUMBER (que rompe los empates de forma arbitraria).
2. Los dos que más ganan en cada departamento
SELECT dept, name, salary
FROM (
SELECT dept, name, salary,
RANK() OVER (PARTITION BY dept ORDER BY salary DESC) AS r
FROM employees
) t
WHERE r <= 2;
PARTITION BY reinicia la clasificación para cada departamento. Menciona que los salarios empatados pueden devolver más de dos filas con RANK.
3. Total acumulado por cliente
SELECT customer, order_date, amount,
SUM(amount) OVER (PARTITION BY customer ORDER BY order_date) AS running_total
FROM orders;
Para un cliente con pedidos de 10, 20 y 30 en fechas crecientes, los totales acumulados son 10, 30 y 60.
4. Elimina las filas duplicadas, conservando la primera
SELECT id, user_id
FROM (
SELECT id, user_id,
ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY id) AS rn
FROM events
) t
WHERE rn = 1;
Aquí ROW_NUMBER es lo correcto, porque quieres exactamente una fila por grupo. Prepárate para decir cómo decidirías qué duplicado conservar en una tabla real (la marca de tiempo más reciente, el registro más completo).
5. Cambio respecto a la fila anterior
SELECT order_date, amount,
amount - LAG(amount) OVER (ORDER BY order_date) AS change
FROM orders
WHERE customer = 'A';
El cambio de la primera fila es NULL, porque no hay fila anterior. Dilo en voz alta, ya que es la pregunta de seguimiento habitual.
6. ¿Cuál es la diferencia entre WHERE y HAVING?
WHERE filtra filas antes de agrupar, y HAVING filtra grupos después de la agregación. No puedes usar un agregado como COUNT(*) en WHERE.
7. ¿Cómo aceleras una consulta lenta?
- Mira el plan de ejecución antes de cambiar nada.
- Comprueba que los filtros puedan usar un índice y que las funciones sobre la columna no lo estén bloqueando.
- Reduce los datos escaneados: selecciona solo las columnas necesarias, filtra cuanto antes y particiona las tablas grandes por fecha.
- Sustituye las subconsultas repetidas por joins o expresiones de tabla comunes, y comprueba que los joins no multipliquen filas por error.
- En los warehouses, revisa las claves de clustering o de ordenación y cuántos datos lee cada consulta.
Preguntas de diseño de pipelines
8. ¿ETL o ELT?
ETL transforma los datos antes de cargarlos. ELT carga primero los datos en bruto y los transforma dentro del warehouse. ELT es habitual con warehouses en la nube porque el almacenamiento es barato, los datos en bruto siguen disponibles para reprocesarlos y las transformaciones se pueden versionar como SQL. ETL sigue teniendo sentido cuando los datos deben limpiarse o enmascararse antes de que lleguen, por ejemplo para eliminar datos personales.
9. ¿Por lotes o en streaming?
Elige según la frescura que necesiten los datos. El procesamiento por lotes es más sencillo y más barato, y encaja en informes diarios. El streaming encaja en casos donde importan los minutos o los segundos, como la detección de fraude o los paneles en vivo. Muchos sistemas usan ambos. Habla de cuál es la decisión de negocio, no solo de la tecnología.
10. ¿Qué es un pipeline idempotente y por qué importa?
Ejecutarlo dos veces produce el mismo resultado que ejecutarlo una vez. Importa porque los trabajos fallan y se reintentan. Para que una carga sea idempotente, escribe por partición y sobrescribe esa partición, o usa un upsert con una clave estable, para que un reintento no cree duplicados.
11. ¿Cómo gestionas datos tardíos o desordenados?
Usa el tiempo del evento en lugar del tiempo de llegada, y define con cuánto retraso pueden llegar los datos. En sistemas de streaming, una marca de agua (watermark) le indica al trabajo cuánto debe esperar antes de cerrar una ventana. Para tablas por lotes, reprocesa las particiones recientes de forma programada, o mantén un proceso de corrección que reescriba los días afectados.
12. ¿Cómo diseñas para fallos y reintentos?
Haz que los pasos sean pequeños, idempotentes y se puedan volver a ejecutar de forma independiente. Guarda el estado fuera del trabajo. Alerta tanto por datos ausentes o tardíos como por errores. Pon un límite a los reintentos y envía los fallos repetidos a un lugar donde alguien los revise.
13. ¿Cómo compruebas la calidad de los datos?
| Comprobación | Ejemplo |
|---|---|
| Completitud | Los recuentos de filas coinciden con el origen dentro de una tolerancia |
| Unicidad | La clave primaria no tiene duplicados |
| Validez | Los valores caen dentro de un rango o conjunto esperado |
| Frescura | La marca de tiempo más reciente es lo bastante reciente |
| Consistencia | Los totales coinciden entre tablas relacionadas |
Ejecuta las comprobaciones dentro del pipeline y falla pronto, para que los datos malos no lleguen a los informes.
Preguntas sobre modelado y almacenamiento
14. ¿Qué es un esquema en estrella?
Una tabla de hechos central contiene eventos medibles, como pedidos, y se conecta a tablas de dimensiones que los describen, como cliente, producto y fecha. Es fácil de consultar y rápida de agregar. Un esquema en copo de nieve normaliza aún más las dimensiones, lo que ahorra espacio pero añade uniones.
15. ¿Qué son las dimensiones de cambio lento?
Son atributos de dimensión que cambian con el tiempo, como la dirección de un cliente. El Tipo 1 sobrescribe el valor anterior y pierde el historial. El Tipo 2 añade una nueva fila con fechas de inicio y fin, por lo que se conserva el historial. Di cuál elegirías para cada atributo y por qué.
16. ¿Cómo particionas una tabla grande?
Particiona por una columna que la mayoría de las consultas filtren, normalmente una fecha. Las consultas que filtran por ella leen solo las particiones coincidentes. Evita una columna con demasiados valores distintos, lo que crea una enorme cantidad de particiones diminutas.
17. ¿Qué formatos de archivo usas para analítica y por qué?
Los formatos columnares como Parquet almacenan cada columna junta, por lo que las consultas que leen unas pocas columnas omiten el resto y comprimen bien. Los formatos por filas como CSV o JSON son fáciles de producir y leer, pero lentos y grandes a escala.
Preguntas sobre procesamiento distribuido
18. ¿Qué es un shuffle en Spark y por qué es costoso?
Un shuffle mueve datos entre máquinas para que las filas con la misma clave queden juntas, como en las uniones y los group-by. Cuesta transferencia de red, escrituras en disco y ordenamiento. Para reducirlo, filtra temprano, elige números de particiones razonables y difunde una tabla pequeña en una unión para que la grande no tenga que moverse.
19. ¿Cómo manejas el sesgo de datos?
El sesgo significa que unas pocas claves concentran la mayor parte de los datos, por lo que una tarea tarda mucho más que el resto. Las opciones incluyen aplicar salting a la clave caliente añadiendo un sufijo aleatorio y agregar dos veces, difundir el lado más pequeño de una unión, y filtrar o manejar las claves calientes por separado.
20. ¿Qué hace un orquestador como Airflow?
Programa y ejecuta tareas en orden, definidas como un grafo dirigido donde cada tarea depende de otras. Gestiona reintentos, backfills y alertas, y muestra qué se ejecutó y qué falló. Coordina el trabajo. No está pensado para hacer el procesamiento pesado por sí mismo, que debe ejecutarse en un almacén de datos o un motor de procesamiento.
Cómo prepararte
- Practica los patrones de funciones de ventana anteriores hasta que puedas escribirlos sin mirar.
- Prepara un pipeline que hayas construido, con el volumen, los fallos que encontraste y lo que cambiaste.
- Estate listo para dibujar una arquitectura sencilla en una pizarra y decir qué ocurre cuando falla un paso.
- Revisa tu currículum: se puede preguntar por cada herramienta que aparezca en él.
Para práctica relacionada, consulta nuestras guías de preguntas de entrevista sobre Kafka, preguntas de entrevista sobre Databricks, preguntas de entrevista sobre Snowflake y preguntas de entrevista sobre diseño de sistemas.
Practica en voz alta y con tus propias palabras. Una transcripción posterior muestra dónde divagaste o te saltaste el punto. Sigue las reglas del empleador sobre herramientas de IA en cualquier entrevista o evaluación en vivo.
Practica tus respuestas con YesToTheOffer
Ensaya en voz alta, obtén respuestas construidas a partir de tu propio currículum y revisa tu transcripción después. 30 minutos gratis, sin suscripción.



