Il falso problema del formato

La domanda “lakehouse o warehouse?” viene spesso posta come se riguardasse il formato di archiviazione. Non è così. In Microsoft Fabric entrambi gli artifact materializzano i dati come Delta table in OneLake, entrambi espongono un SQL analytics endpoint interrogabile in T-SQL, ed entrambi alimentano un semantic model in Direct Lake. Un report Power BI costruito su un lakehouse non è “meno veloce” per definizione di uno costruito su un warehouse.

La vera discriminante è come si scrivono i dati e quale modello di sviluppo adotta il team:

Aspetto Lakehouse Warehouse
Scrittura Spark (PySpark, Scala, Spark SQL), pipeline, dataflow, shortcut T-SQL DML: INSERT, UPDATE, DELETE, CREATE TABLE AS SELECT, COPY INTO
SQL analytics endpoint Read-only Lettura e scrittura
Transazioni multi-table No (Delta garantisce ACID sulla singola tabella) , transazioni ACID cross-table
Dati non strutturati Sì, sezione Files (PDF, immagini, JSON grezzo, CSV) No, solo tabelle relazionali
Skill richieste Python/Spark, data engineering T-SQL, data warehousing classico
Direct Lake Supportato Supportato
Cross-database query Consuma altri artifact via endpoint Query cross-warehouse e cross-lakehouse native

Criteri di scelta operativi

Scegli il lakehouse quando

  • Il team lavora in PySpark/Python e usa notebook come strumento primario.
  • Devi ingerire dati non strutturati o semi-strutturati prima di modellarli: la sezione Files accetta qualunque cosa, poi la promuovi a Delta table.
  • Usi shortcut verso ADLS Gen2, Amazon S3, Google Cloud Storage o altri lakehouse per evitare la copia fisica dei dati.
  • Hai bisogno di feature Spark-native: streaming strutturato, MLflow, librerie Python di trasformazione.

Scegli il warehouse quando

  • Il team è composto da sviluppatori T-SQL senza competenze Spark.
  • Servono transazioni multi-table: aggiornare fact e dimension in un’unica unità atomica con BEGIN TRAN / COMMIT.
  • Vuoi scrivere trasformazioni interamente in T-SQL, senza notebook.
  • Stai migrando un data warehouse esistente (Azure Synapse dedicated SQL pool, SQL Server) e vuoi riusare le stored procedure.
  • Ti servono chiavi primarie ed esterne dichiarate (non enforced, ma utili al modello semantico e all’optimizer).

Il vincolo che decide quasi sempre

Se il requisito dice “gli sviluppatori devono aggiornare i dati con T-SQL”, la risposta è warehouse. Punto. Il SQL analytics endpoint del lakehouse permette SELECT e la creazione di viste e stored procedure, ma non INSERT/UPDATE/DELETE/MERGE sulle tabelle. Per modificare una tabella del lakehouse serve Spark, una pipeline o un dataflow.

L’architettura mista: il pattern reale

Nella pratica non si sceglie uno contro l’altro. L’architettura medallion tipica in Fabric distribuisce i layer:

  • Bronze — lakehouse. Landing zone dei dati grezzi, spesso via shortcut per non duplicare storage. File di ogni tipo, nessuna trasformazione.
  • Silver — lakehouse. Dati puliti, deduplicati, tipizzati, materializzati come Delta table. Trasformazioni in Spark o dataflow.
  • Gold — warehouse. Modello dimensionale (star schema) esposto al business, con relazioni dichiarate, viste, stored procedure di aggiornamento incrementale in T-SQL, e semantic model in Direct Lake sopra.

Il collante è il SQL analytics endpoint: dal warehouse gold puoi eseguire query T-SQL che uniscono le sue tabelle a quelle di un lakehouse silver aggiunto allo stesso workspace, con notazione a tre parti database.schema.tabella. Le cross-database query funzionano in lettura su lakehouse e in lettura/scrittura sul warehouse locale.

Trappole tipiche d’esame

  • Scenario: il team di sviluppo conosce solo T-SQL e deve aggiornare le tabelle gold. → Risposta: warehouse. Il lakehouse richiede Spark per la scrittura; il suo endpoint SQL è read-only.
  • Scenario: bisogna ingerire file PDF e immagini insieme a CSV in una landing zone. → Risposta: lakehouse (sezione Files). Il warehouse gestisce solo tabelle relazionali.
  • Scenario: un processo deve aggiornare fact e dimension in un’unica transazione atomica, con rollback in caso di errore. → Risposta: warehouse. Il lakehouse offre ACID solo a livello di singola Delta table.
  • Scenario: “quale opzione garantisce le prestazioni Direct Lake migliori?” con lakehouse e warehouse come alternative. → Risposta: attenzione, entrambi supportano Direct Lake perché entrambi scrivono Delta in OneLake. La scelta va motivata sul modello di scrittura, non sulle prestazioni del semantic model.
  • Scenario: serve leggere dati che vivono in Amazon S3 senza copiarli in Fabric. → Risposta: lakehouse con shortcut. Il warehouse non supporta shortcut verso storage esterno.