Ogni servizio dati su Azure è progettato per un certo tipo di dato. Prima ancora di scegliere fra un database SQL, un data lake o un servizio NoSQL, l’esame DP-900 vuole che tu sappia riconoscere come è organizzato il dato: da questa classificazione dipende quasi ogni decisione architetturale. I dati si dividono in tre grandi categorie: strutturati, semi-strutturati e non strutturati.
Dati strutturati
Un dato strutturato rispetta uno schema rigido e predefinito: righe e colonne con tipi ben definiti, come in una tabella. È il modello classico dei database relazionali.
- Ogni colonna ha un tipo fisso (
int,varchar,datetime) e ogni riga rappresenta un record coerente. - Le relazioni fra tabelle sono espresse tramite chiavi primarie ed esterne.
- Si interroga tipicamente con SQL.
Esempi concreti: una tabella Clienti, un gestionale contabile, i record di un ordine e-commerce. Su Azure questi dati vivono in servizi come Azure SQL Database, Azure Database for PostgreSQL o Azure Database for MySQL.
Dati semi-strutturati
Il dato semi-strutturato ha una struttura, ma flessibile e non rigida: le informazioni si portano dietro il proprio schema tramite tag, chiavi o gerarchie, e record diversi possono avere campi diversi.
- Formati tipici: JSON, XML, YAML, CSV (spesso considerato al confine col strutturato) e i documenti tipo key-value o graph.
- Non serve definire in anticipo tutte le colonne: puoi aggiungere un campo a un singolo documento senza modificare gli altri.
- Ideale per dati che evolvono nel tempo o che arrivano da fonti eterogenee (IoT, API, log applicativi).
Esempio: un documento JSON di un profilo utente in cui alcuni hanno il campo telefono e altri no. Su Azure il servizio di riferimento è Azure Cosmos DB (in particolare l’API for NoSQL, orientata ai documenti), ma anche Azure Table Storage.
Dati non strutturati
Il dato non strutturato non ha un modello dati interno interrogabile a colonne: è contenuto “grezzo” il cui significato non è organizzato in campi.
- Esempi: immagini, video, file audio, documenti (PDF, Word), email, file di testo libero.
- Costituisce la maggior parte dei dati aziendali oggi prodotti.
- Si archivia in servizi ottimizzati per grandi oggetti binari, come Azure Blob Storage e Azure Data Lake Storage Gen2.
Nota: un’email o un PDF sono spesso citati come esempi “misti”, perché contengono metadati semi-strutturati (mittente, data) attorno a un corpo non strutturato. All’esame, valuta il contenuto principale.
Schema-on-write vs schema-on-read
La struttura del dato determina anche quando ne viene applicato lo schema.
- Schema-on-write: lo schema è definito e validato prima di scrivere il dato. È l’approccio dei database relazionali: se un record non rispetta lo schema, viene rifiutato. Garantisce coerenza e qualità in ingresso, ma è meno flessibile.
- Schema-on-read: il dato viene salvato “così com’è” e lo schema si applica al momento della lettura/analisi. Tipico dei data lake: scrivi rapidamente qualsiasi formato e imponi una struttura solo quando servirà (es. con Spark in Microsoft Fabric o Azure Synapse). Massima flessibilità, ma la qualità va gestita a valle.
In sintesi: dato strutturato → tipicamente schema-on-write; dato semi/non strutturato in un data lake → tipicamente schema-on-read.
Trappole tipiche d’esame
- Scenario: “Devi archiviare foto dei prodotti caricate dagli utenti.” → Dato non strutturato: usa Azure Blob Storage, non un database SQL.
- Scenario: “Ricevi documenti JSON con campi che variano da record a record e vuoi query flessibili.” → Dato semi-strutturato: Azure Cosmos DB, non una tabella relazionale con schema rigido.
- Scenario: “Serve integrità referenziale con chiavi esterne e transazioni per un gestionale ordini.” → Dato strutturato: Azure SQL Database (relazionale, schema-on-write).
- Scenario: “Ingesti grandi volumi grezzi di formati misti e applichi lo schema solo in fase di analisi.” → È schema-on-read, tipico di un data lake (Azure Data Lake Storage / Microsoft Fabric).
- Scenario: “Un file CSV è strutturato o semi-strutturato?” → Trattato come semi-strutturato (ha delimitatori ma nessuno schema o tipi imposti); se caricato in una tabella SQL diventa strutturato.