I colloqui in Databricks di solito mescolano Apache Spark (come vengono eseguiti i job, perché sono lenti), Delta Lake (cosa rende affidabili le tabelle) e la piattaforma (cluster, job, governance). Le risposte più solide collegano ogni concetto a un problema reale, come join sbilanciati, file di piccole dimensioni o una pipeline che deve essere rieseguita in modo sicuro.
Databricks rinomina e riorganizza i prodotti abbastanza spesso, quindi indica quali nomi hai usato (per esempio Delta Live Tables, ora parte della famiglia Lakeflow) e controlla la job description per lo stack.
Di seguito trovi 25 domande con risposte.
Piattaforma e architettura
1. Cos'è Databricks e cos'è un lakehouse?
Databricks è una piattaforma cloud per dati e AI costruita attorno ad Apache Spark. Un lakehouse mantiene i dati in formati aperti su object storage cloud e vi aggiunge sopra l'affidabilità e la governance di un data warehouse, così una sola copia dei dati può servire ingegneria, analytics e machine learning.
2. Qual è la differenza tra cluster all-purpose, cluster job e SQL warehouse?
I cluster all-purpose servono per il lavoro interattivo e lo sviluppo. I cluster job si avviano per un job pianificato e si spengono al termine, con costi inferiori. Gli SQL warehouse sono compute ottimizzati per query SQL e BI.
3. Come si controllano i costi?
Usa cluster job per la produzione, auto-terminazione sui cluster interattivi, autoscaling con limiti sensati, tipi di istanza dimensionati correttamente, istanze spot per lavori tolleranti ai guasti, cluster policy per limitare ciò che le persone possono creare e tag per il reporting dei costi.
4. Cos'è Unity Catalog?
Il livello di governance per gli asset di dati e AI. Fornisce un namespace a tre livelli (catalog, schema, table), controllo degli accessi centralizzato, lineage e auditing su tutti i workspace.
Delta Lake
5. Cos'è Delta Lake e perché usarlo invece del semplice Parquet?
Delta Lake è un formato di tabella che aggiunge un transaction log ai file Parquet. Offre transazioni ACID, enforcement e evoluzione dello schema, time travel e aggiornamenti ed eliminazioni efficienti. Il semplice Parquet non ha transazioni, quindi una scrittura fallita può lasciare dati parziali e i lettori possono vedere uno stato incoerente.
6. Come funziona il transaction log di Delta?
Ogni commit aggiunge una voce JSON alla cartella _delta_log, con checkpoint periodici. Il log elenca quali file di dati fanno parte della tabella a ogni versione. I lettori lo usano per vedere uno snapshot coerente, mentre gli scrittori usano la concorrenza ottimistica, riprovando o fallendo se un altro commit entra in conflitto.
7. Cos'è il time travel?
La possibilità di interrogare una versione precedente di una tabella tramite numero di versione o timestamp, per audit, debug o rollback.
SELECT * FROM sales VERSION AS OF 12;
RESTORE TABLE sales TO VERSION AS OF 12;
8. Come si fa l'upsert dei dati con Delta?
Con MERGE INTO:
MERGE INTO customers t
USING updates s ON t.id = s.id
WHEN MATCHED THEN UPDATE SET *
WHEN NOT MATCHED THEN INSERT *;
Assicurati che la sorgente abbia una sola riga per chiave, altrimenti il merge fallisce o produce risultati errati.
9. Cosa fanno OPTIMIZE e VACUUM?
OPTIMIZE compatta molti file di piccole dimensioni in file più grandi, velocizzando le letture. VACUUM elimina i file non più referenziati dalla tabella e più vecchi del periodo di retention, liberando spazio ma limitando il time travel. Non impostare una retention troppo breve mentre altri job potrebbero ancora leggere versioni precedenti.
10. Come si organizza la disposizione dei dati per query veloci?
Partiziona solo su colonne a bassa cardinalità su cui le query filtrano spesso e mantieni partizioni sufficientemente grandi. Un partizionamento eccessivo crea molti file di piccole dimensioni. Per le altre colonne, usa lo Z-ordering o il liquid clustering (l'approccio più recente), che raggruppano i dati in modo che le query possano saltare interi file.
Fondamenti di Spark
11. Cosa sono le trasformazioni e le azioni, e cosa si intende per valutazione lazy?
Le trasformazioni come filter e select costruiscono un piano ma non vengono eseguite. Le azioni come count e write innescano l'esecuzione. Poiché Spark vede prima l'intero piano, può ottimizzarlo.
12. Cos'è uno shuffle, e perché è costoso?
Uno shuffle sposta i dati tra gli executor attraverso la rete, in modo che le righe con la stessa chiave finiscano insieme, come avviene in join, groupBy e distinct. Comporta I/O su disco e in rete, quindi ridurre gli shuffle è la via principale per ottenere job più veloci.
13. Come fa Spark a fare il join tra due tabelle, e come si può velocizzare?
Per impostazione predefinita i join di grandi dimensioni usano uno shuffle join (sort-merge). Se una tabella è piccola, un broadcast join la invia a ogni executor ed evita lo shuffle della tabella grande.
from pyspark.sql.functions import broadcast
df = big.join(broadcast(small), "id")
14. Cos'è la data skew, e come si risolve?
Poche chiavi contengono la maggior parte delle righe, quindi alcune task impiegano molto più tempo delle altre. Il segnale è una task che dura a lungo nella Spark UI. Le soluzioni sono la gestione dello skew dell'adaptive query execution, il salting della chiave, il broadcast del lato più piccolo oppure il filtraggio delle chiavi null o di default che causano lo skew.
15. Cos'è l'adaptive query execution (AQE)?
Spark adatta il piano durante l'esecuzione usando statistiche reali: può unire le piccole partizioni di shuffle, cambiare strategia di join e suddividere le partizioni sbilanciate. È attivo per impostazione predefinita nelle versioni recenti.
16. Qual è la differenza tra repartition e coalesce?
repartition può aumentare o diminuire il numero di partizioni ed esegue uno shuffle completo. coalesce può solo diminuire le partizioni ed evita uno shuffle completo, quindi è più economico ma può produrre partizioni non uniformi.
17. Quando conviene mettere in cache un DataFrame?
Quando lo stesso DataFrame viene riutilizzato più volte all'interno di un job e ricalcolarlo è costoso. Non mettere in cache ciò che viene usato una sola volta e rilascia la cache quando hai finito.
18. Perché preferire le funzioni integrate alle UDF Python?
Le funzioni integrate vengono eseguite all'interno della JVM e possono essere ottimizzate. Le UDF Python spostano i dati tra la JVM e Python e sono opache per l'ottimizzatore, quindi sono più lente. Usa le funzioni integrate o le UDF pandas quando possibile.
Pipeline
19. Cos'è la medallion architecture?
Un design a livelli: il bronze contiene i dati grezzi acquisiti, il silver contiene i dati puliti e conformati, e il gold contiene aggregati di livello business pronti per il reporting. Rende chiaro dove avvengono i controlli di qualità e permette di ricostruire i livelli successivi a partire da quelli precedenti.
20. Cos'è Auto Loader?
Una funzionalità che acquisisce in modo incrementale ed efficiente i nuovi file dallo storage cloud man mano che arrivano, tenendo traccia dei file già elaborati, con supporto per l'inferenza e l'evoluzione dello schema.
21. Come gestisce Structured Streaming i guasti e l'exactly-once?
Usa checkpoint che memorizzano il progresso e lo stato, così una query riavviata riprende da dove si era fermata. Con sorgenti riproducibili e sink idempotenti o transazionali come Delta, si ottengono risultati exactly-once end-to-end.
22. Come si rende una pipeline sicura da rieseguire?
Rendi le scritture idempotenti: usa MERGE su una chiave, sovrascrivi una partizione specifica oppure usa un run ID per evitare duplicati. Mantieni esplicito l'intervallo di input del job e registra il conteggio delle righe per poter verificare i risultati.
23. Come si eseguono i controlli di qualità dei dati?
Usa expectation o vincoli nella pipeline (ad esempio vincoli Delta o expectation delle pipeline dichiarative), verifica conteggi delle righe, null e unicità, e metti in quarantena le righe difettose invece di far fallire l'intero caricamento, a seconda del contratto con gli utenti a valle.
Scenari
24. Un job che girava in 20 minuti ora impiega tre ore. Cosa fai?
- Confronta la Spark UI delle due esecuzioni: quale stage è diventato più lento?
- Controlla la dimensione dell'input e se una tabella è cresciuta o ha perso il suo layout, ad esempio per la presenza di molti file di piccole dimensioni.
- Cerca lo skew nello stage lento e verifica se ci sono spill su disco.
- Controlla i cambiamenti del cluster, come un numero inferiore di worker o un tipo di istanza diverso.
- Verifica modifiche al codice o alle impostazioni di Spark, e la presenza di un nuovo join o di una UDF.
- Risolvi la causa (compaction, broadcast, gestione dello skew o sizing) e aggiungi il monitoraggio.
25. Progetta una pipeline che acquisisce file JSON giornalieri e alimenta una dashboard.
"Auto Loader legge i nuovi file in una tabella Delta bronze con i dati grezzi e i metadati. Un job li analizza e li pulisce nel silver, deduplicando per chiave con MERGE. Una tabella gold aggrega per la dashboard, che legge da un SQL warehouse. Unity Catalog gestisce gli accessi, le expectation intercettano i dati errati e il job viene eseguito su un job cluster con avvisi in caso di errore e di anomalie nel conteggio delle righe."
Come prepararsi
Usa un notebook che legge un file, fa una join con un'altra tabella, scrive su Delta e utilizza MERGE. Apri la Spark UI e individua uno shuffle e un task skew. Preparati un racconto su come hai velocizzato o risolto un problema in una pipeline, con i numeri. Per argomenti correlati, consulta le nostre guide su Kafka, Snowflake e Talend.
Pronuncia le risposte ad alta voce, soprattutto quelle sulla performance, dove i candidati tendono a elencare consigli di tuning senza una diagnosi. La trascrizione di un colloquio simulato ti mostra dove. Rispetta le regole del datore di lavoro sugli strumenti di AI in qualsiasi colloquio dal vivo.
Esercitati con le risposte ai colloqui Databricks con YesToTheOffer
Fai un colloquio tecnico simulato, spiega a voce la progettazione di una pipeline e rivedi la tua trascrizione in seguito. 30 minuti gratuiti, senza abbonamento.



