🎁 Registrati ora e ottieni fino a 30 minuti gratuiti di IA online. Nessuna carta di credito richiesta.

Domande e risposte per colloqui da Data Engineer (2026): SQL, pipeline e Spark

October 9, 2026
20 domande per colloqui da data engineer con risposte: funzioni finestra SQL con esempi testati, ETL vs ELT, pipeline idempotenti, qualità dei dati, modellazione, shuffle di Spark e Airflow.
Domande e risposte per colloqui da Data Engineer (2026): SQL, pipeline e Spark
domande colloquio data engineer
colloquio data engineering
funzioni finestra sql colloquio
etl vs elt
domande colloquio spark

I colloqui per data engineer mettono alla prova tre cose: SQL, come progetti e gestisci le pipeline di dati e come ragioni su scala e guasti. Qui sotto trovi 20 domande con risposte che puoi adattare, nell'ordine in cui i candidati di solito le incontrano. Gli esempi SQL sono stati eseguiti su un piccolo database di esempio prima della pubblicazione, e i risultati mostrati sono l'output reale.

Domande su SQL

1. Trova il secondo stipendio più alto in ogni azienda o in generale

Usa DENSE_RANK, così i pareggi condividono lo stesso rango e "secondo più alto" significa il secondo valore distinto.

SELECT name, salary
FROM (
  SELECT name, salary, DENSE_RANK() OVER (ORDER BY salary DESC) AS r
  FROM employees
) t
WHERE r = 2;

Su una tabella con stipendi 150, 130, 130, 110, 90, 70 questo restituisce le due persone pagate 130. Spiega perché hai scelto DENSE_RANK invece di RANK (che salta i numeri dopo i pareggi) e ROW_NUMBER (che rompe i pareggi in modo arbitrario).

2. I due dipendenti più pagati in ogni reparto

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 fa ripartire la classifica per ogni reparto. Accenna al fatto che con RANK gli stipendi a pari merito possono restituire più di due righe.

3. Totale progressivo per cliente

SELECT customer, order_date, amount,
       SUM(amount) OVER (PARTITION BY customer ORDER BY order_date) AS running_total
FROM orders;

Per un cliente con ordini di 10, 20 e 30 in date crescenti, i totali progressivi sono 10, 30 e 60.

4. Rimuovi le righe duplicate, mantenendo la prima

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;

Qui ROW_NUMBER è la scelta giusta, perché vuoi esattamente una riga per gruppo. Preparati a dire come decideresti quale duplicato mantenere in una tabella reale (timestamp più recente, record più completo).

5. Variazione rispetto alla riga precedente

SELECT order_date, amount,
       amount - LAG(amount) OVER (ORDER BY order_date) AS change
FROM orders
WHERE customer = 'A';

La variazione della prima riga è NULL, perché non c'è una riga precedente. Dillo esplicitamente, visto che è la domanda di approfondimento tipica.

6. Qual è la differenza tra WHERE e HAVING?

WHERE filtra le righe prima del raggruppamento, mentre HAVING filtra i gruppi dopo l'aggregazione. Non puoi usare un aggregato come COUNT(*) in WHERE.

7. Come velocizzi una query lenta?

  1. Guarda il piano di esecuzione prima di cambiare qualsiasi cosa.
  2. Verifica che i filtri possano usare un indice e che le funzioni applicate alla colonna non lo blocchino.
  3. Riduci i dati scansionati: seleziona solo le colonne necessarie, filtra il prima possibile e partiziona le tabelle grandi per data.
  4. Sostituisci le sottoquery ripetute con join o common table expression e controlla che i join non moltiplichino le righe per errore.
  5. Nei warehouse, controlla le clustering key o le sort key e quanti dati legge ogni query.

Domande sulla progettazione delle pipeline

8. ETL o ELT?

ETL trasforma i dati prima di caricarli. ELT carica prima i dati grezzi e li trasforma dentro il warehouse. ELT è comune con i warehouse cloud perché lo storage costa poco, i dati grezzi restano disponibili per la rielaborazione e le trasformazioni possono essere versionate come SQL. ETL ha ancora senso quando i dati devono essere puliti o mascherati prima di arrivare a destinazione, per esempio per rimuovere i dati personali.

9. Batch o streaming?

Scegli in base a quanto devono essere freschi i dati. Il batch è più semplice ed economico e va bene per i report giornalieri. Lo streaming serve nei casi in cui contano i minuti o i secondi, come i controlli antifrode o le dashboard in tempo reale. Molti sistemi usano entrambi. Parla della decisione di business, non solo della tecnologia.

10. Cos'è una pipeline idempotente e perché è importante?

Eseguirla due volte produce lo stesso risultato che eseguirla una volta. È importante perché i job falliscono e vengono ritentati. Per rendere idempotente un caricamento, scrivi per partizione e sovrascrivi quella partizione, oppure usa un upsert con una chiave stabile, così un nuovo tentativo non crea duplicati.

11. Come gestisci i dati in ritardo o fuori ordine?

Usa l'event time invece dell'arrival time e definisci quanto in ritardo possono arrivare i dati. Nei sistemi di streaming, un watermark indica al job quanto aspettare prima di chiudere una finestra. Per le tabelle batch, rielabora periodicamente le partizioni recenti, oppure mantieni un processo di correzione che riscrive i giorni interessati.

12. Come progetti per far fronte a guasti e retry?

Rendi i passaggi piccoli, idempotenti e rieseguibili in modo indipendente. Salva lo stato all'esterno del job. Attiva avvisi sia sugli errori sia sui dati mancanti o in ritardo. Metti un limite ai retry e manda i fallimenti ripetuti in un posto dove qualcuno li controlli.

13. Come verifichi la qualità dei dati?

ControlloEsempio
CompletezzaIl numero di righe corrisponde alla fonte entro una tolleranza
UnicitàLa chiave primaria non ha duplicati
ValiditàI valori rientrano in un intervallo o in un insieme attesi
FreschezzaIl timestamp più recente è abbastanza recente
CoerenzaI totali coincidono tra tabelle correlate

Esegui i controlli dentro la pipeline e fallisci presto, così i dati sbagliati non arrivano ai report.

Domande su modellazione e archiviazione

14. Cos'è uno schema a stella?

Una tabella dei fatti centrale contiene eventi misurabili, come gli ordini, e si collega a tabelle dimensionali che li descrivono, come cliente, prodotto e data. È facile da interrogare e veloce da aggregare. Uno schema a fiocco di neve normalizza ulteriormente le dimensioni, il che fa risparmiare spazio ma aggiunge join.

15. Cosa sono le dimensioni a variazione lenta?

Sono attributi dimensionali che cambiano nel tempo, come l'indirizzo di un cliente. Il Tipo 1 sovrascrive il vecchio valore e perde la cronologia. Il Tipo 2 aggiunge una nuova riga con date di inizio e fine, così la cronologia viene conservata. Di' quale sceglieresti per quale attributo e perché.

16. Come si partiziona una tabella di grandi dimensioni?

Si partiziona su una colonna sulla quale la maggior parte delle query filtra, di solito una data. Le query che filtrano su di essa leggono solo le partizioni corrispondenti. Evita una colonna con troppi valori distinti, che crea un numero enorme di partizioni minuscole.

17. Quali formati di file usi per l'analytics, e perché?

I formati colonnari come Parquet memorizzano ogni colonna insieme, così le query che leggono poche colonne saltano il resto e si comprimono bene. I formati a righe come CSV o JSON sono facili da produrre e leggere ma lenti e pesanti su larga scala.

Domande sull'elaborazione distribuita

18. Cos'è uno shuffle in Spark, e perché è costoso?

Uno shuffle sposta i dati tra le macchine in modo che le righe con la stessa chiave finiscano insieme, come nei join e nei group-by. Costa trasferimento di rete, scritture su disco e ordinamento. Per ridurlo, filtra presto, scegli un numero sensato di partizioni e trasmetti in broadcast una tabella piccola in un join così quella grande non deve spostarsi.

19. Come si gestisce la distorsione dei dati?

La distorsione significa che poche chiavi contengono la maggior parte dei dati, quindi un task viene eseguito molto più a lungo degli altri. Le opzioni includono il salting della chiave calda aggiungendo un suffisso casuale e aggregando due volte, il broadcast del lato più piccolo di un join e il filtraggio o la gestione separata delle chiavi calde.

20. Cosa fa un orchestratore come Airflow?

Pianifica ed esegue i task in ordine, definiti come un grafo diretto in cui ogni task dipende dagli altri. Gestisce retry, backfill e avvisi, e mostra cosa è stato eseguito e cosa è fallito. Coordina il lavoro. Non è pensato per fare elaborazioni pesanti da solo, che dovrebbero essere eseguite in un warehouse o in un motore di elaborazione.

Come prepararsi

  1. Esercitati sui pattern delle funzioni finestra qui sopra finché non riesci a scriverli senza guardare.
  2. Prepara una pipeline che hai costruito, con il volume, i guasti che hai incontrato e cosa hai cambiato.
  3. Sii pronto a disegnare un'architettura semplice su una lavagna e a dire cosa succede quando un passaggio fallisce.
  4. Rivedi il tuo curriculum: ogni strumento elencato può essere oggetto di domande.

Per esercitarti su argomenti correlati, consulta le nostre guide alle domande di colloquio su Kafka, domande di colloquio su Databricks, domande di colloquio su Snowflake e domande di colloquio sul system design.

Esercitati ad alta voce e con parole tue. Una trascrizione successiva mostra dove hai divagato o saltato il punto. Segui le regole del datore di lavoro sugli strumenti di IA in qualsiasi colloquio o valutazione dal vivo.

Esercita le tue risposte con YesToTheOffer

Prova ad alta voce, ottieni risposte costruite dal tuo curriculum e rivedi la trascrizione dopo. 30 minuti gratuiti, nessun abbonamento.

iOS & Android — In arrivo
Vedi i prezzi