Analisi di flusso di Azure: scrivere in una tabella Delta Lake
Delta Lake è un formato aperto che offre affidabilità, qualità e prestazioni ai data lake. È possibile usare Analisi di flusso di Azure per scrivere direttamente i dati di streaming nelle tabelle Delta Lake senza scrivere una singola riga di codice.
Un processo di Analisi di flusso può essere configurato per scrivere tramite un connettore di output Delta Lake nativo, in una tabella Delta nuova o precreata in un account Azure Data Lake Storage Gen2. Questo connettore è ottimizzato per l'inserimento ad alta velocità nelle tabelle Delta in modalità Accodamento. Fornisce anche una semantica di tipo exactly-once, che garantisce che nessun dato venga perso o duplicato. L'inserimento di flussi di dati in tempo reale da Hub eventi di Azure in tabelle Delta consente di eseguire analisi interattive o batch ad hoc.
Configurazione di Delta Lake
Per scrivere dati in Delta Lake, è necessario connettersi a un account Data Lake Storage Gen2. Nella tabella seguente sono elencate le proprietà correlate alla configurazione di Delta Lake.
Nome proprietà | Descrizione |
---|---|
Formato di serializzazione eventi | Formato di serializzazione per i dati di output. Sono supportati JSON, CSV, Avro e Parquet. Delta Lake è elencato come opzione qui. I dati sono in formato Parquet se è selezionato Delta Lake. |
Nome percorso differenziale | Percorso usato per scrivere la tabella Delta Lake all'interno del contenitore specificato. Include il nome della tabella. Altre informazioni sono disponibili nella sezione successiva. |
Colonna di partizione | Facoltativo. Nome {field} dei dati di output da partizionare. È supportata una sola colonna di partizione. Il valore della colonna deve essere di string tipo . |
Per visualizzare l'elenco completo della configurazione di Data Lake Storage Gen2, vedere Panoramica di Azure Data Lake Storage Gen2.
Nome percorso differenziale
Il nome del percorso Delta viene usato per specificare la posizione e il nome della tabella Delta Lake archiviata in Data Lake Storage Gen2.
È possibile usare uno o più segmenti di percorso per definire il percorso della tabella Delta e il nome della tabella Delta. Un segmento di percorso è la stringa tra caratteri delimitatori consecutivi (ad esempio, la barra /
) che corrisponde al nome di una directory virtuale.
Il nome del segmento è alfanumerico e può includere spazi, trattini e caratteri di sottolineatura. L'ultimo segmento di percorso viene usato come nome della tabella.
Le restrizioni relative al nome del percorso Delta includono:
- I nomi dei campi non fanno distinzione tra maiuscole e minuscole. Ad esempio, il servizio non può distinguere tra la colonna
ID
eid
. - Non è consentito alcun nome dinamico
{field}
. Ad esempio,{ID}
viene considerato come testo {ID}. - Il numero di segmenti di percorso che comprendono il nome non può superare 254.
Esempi
Esempi per un nome di percorso Delta:
- Esempio 1:
WestUS/CA/factory1/device-table
- Esempio 2:
Test/demo
- Esempio 3:
mytable
File di output di esempio:
- Nel contenitore scelto, il percorso della directory è
WestEurope/CA/factory1
e il nome della cartella della tabella Delta è device-table. - Nel contenitore scelto, il percorso della directory è
Test
e il nome della cartella della tabella Delta è demo. - Nel contenitore scelto il nome della cartella della tabella Delta è mytable.
Creare una nuova tabella
Se non esiste già una tabella Delta Lake con lo stesso nome e nella posizione specificata dal nome del percorso Delta, per impostazione predefinita Analisi di flusso crea una nuova tabella Delta. Questa nuova tabella viene creata con la configurazione seguente:
- Writer versione 2.
- Lettore versione 1.
- La tabella è di sola accodamento.
- Lo schema della tabella viene creato con lo schema del primo record rilevato.
Scrivere nella tabella
Se esiste già una tabella Delta Lake con lo stesso nome e nella posizione specificata dal nome del percorso Delta, per impostazione predefinita Analisi di flusso scrive nuovi record nella tabella esistente.
Consegna esattamente una volta
Il log delle transazioni consente a Delta Lake di garantire l'elaborazione esattamente una volta. Analisi di flusso fornisce anche il recapito di tipo exactly-once durante l'output dei dati in Data Lake Storage Gen2 durante un'esecuzione di un singolo processo.
Applicazione dello schema
L'imposizione dello schema significa che tutte le nuove scritture in una tabella vengono applicate per essere compatibili con lo schema della tabella di destinazione in fase di scrittura per garantire la qualità dei dati.
Tutti i record di dati di output vengono proiettati nello schema della tabella esistente. Se l'output viene scritto in una nuova tabella Delta, lo schema della tabella viene creato con il primo record. Se i dati in ingresso hanno una colonna aggiuntiva rispetto allo schema di tabella esistente, viene scritta nella tabella senza la colonna aggiuntiva. Se mancano una colonna rispetto allo schema di tabella esistente, i dati in ingresso vengono scritti nella tabella con la colonna null.
Se non esiste un'intersezione tra lo schema della tabella Delta e lo schema di un record del processo di streaming, viene considerata un'istanza di errore di conversione dello schema. Non è l'unico caso considerato un errore di conversione dello schema.
In caso di errore di conversione dello schema, il comportamento del processo segue i criteri di gestione degli errori dei dati di output configurati a livello di processo.
Checkpoint del log differenziale
Il processo di Analisi di flusso crea periodicamente checkpoint di log Delta nel formato V1. I checkpoint del log differenziale sono snapshot della tabella Delta e in genere contengono il nome del file di dati generato dal processo di Analisi di flusso. Se il numero di file di dati è di grandi dimensioni, comporta checkpoint di grandi dimensioni, che possono causare problemi di memoria nel processo di Analisi di flusso.
Limiti
- La chiave di partizione dinamica (specificando il nome di una colonna dello schema di record nel percorso Delta) non è supportata.
- Più colonne di partizione non sono supportate. Se si vogliono più colonne di partizione, è consigliabile usare una chiave composita nella query e quindi specificarla come colonna di partizione.
- È possibile creare una chiave composita nella query. Un esempio è
"SELECT concat (col1, col2) AS compositeColumn INTO [blobOutput] FROM [input]"
.
- È possibile creare una chiave composita nella query. Un esempio è
- La scrittura in Delta Lake viene aggiunta solo.
- Il controllo dello schema nei test delle query non è disponibile.
- La compattazione di file di piccole dimensioni non viene eseguita da Analisi di flusso.
- Tutti i file di dati vengono creati senza compressione.
- I tipi Date e Decimal non sono supportati.
- La scrittura in tabelle esistenti di Writer versione 7 o successiva con le funzionalità del writer ha esito negativo.
- Esempio: la scrittura in tabelle esistenti con vettori di eliminazione abilitati ha esito negativo.
- Le eccezioni sono le funzionalità changeDataFeed e appendOnly Writer.
- Quando un processo di Analisi di flusso scrive un batch di dati in un Delta Lake, può generare più azioni Aggiungi file. Quando sono presenti troppe azioni Aggiungi file generate per un singolo batch, un processo di Analisi di flusso può essere bloccato.
- Il numero di azioni Aggiungi file generate è determinato da molti fattori:
- Dimensioni del batch. È determinato dal volume di dati e dai parametri di invio in batch Minimo righe e Tempo massimo.
- Cardinalità dei valori della colonna di partizione del batch.
- Per ridurre il numero di azioni Aggiungi file generate per un batch:
- Ridurre le configurazioni di invio in batch Minimo righe e Tempo massimo.
- Ridurre la cardinalità dei valori della colonna di partizione modificando i dati di input o scegliendo una colonna di partizione diversa.
- Il numero di azioni Aggiungi file generate è determinato da molti fattori:
- I processi di Analisi di flusso possono solo leggere e scrivere checkpoint V1 a parte singola. I checkpoint multipart e il formato V2 del checkpoint non sono supportati.