Condividi tramite


Archiviazione BLOB di Azure e l'output di Data Lake Storage Gen2 da Analisi di flusso

Azure Data Lake Storage Gen2 rende Archiviazione di Azure base per la creazione di data lake aziendali in Azure. Data Lake Storage Gen2 è progettato per gestire più petabyte di informazioni e supportare centinaia di gigabit di velocità effettiva. È possibile usarlo per gestire facilmente grandi quantità di dati. Una parte fondamentale di Data Lake Storage Gen2 è l'aggiunta di uno spazio dei nomi gerarchico a Archiviazione BLOB di Azure.

Archiviazione BLOB offre una soluzione conveniente e scalabile per l'archiviazione di grandi quantità di dati non strutturati nel cloud. Per un'introduzione all'archiviazione BLOB e al relativo uso, vedere Caricare, scaricare ed elencare i BLOB con il portale di Azure.

Nota

Per informazioni sui comportamenti specifici dei formati Avro e Parquet, vedere le sezioni correlate nella panoramica.

Configurazione di output

La tabella seguente elenca i nomi delle proprietà e le relative descrizioni per la creazione di un BLOB o di un output di Data Lake Storage Gen2.

Nome proprietà Descrizione
Alias di output Nome descrittivo usato nelle query per indirizzare l'output della query a questo BLOB.
Account di archiviazione Nome dell'account di archiviazione a cui si sta inviando l'output.
chiave dell'account di archiviazione Chiave privata associata all'account di archiviazione.
Contenitore Raggruppamento logico per i BLOB archiviati nell'archivio BLOB. Quando si carica un BLOB nell'archivio BLOB, è necessario specificare un contenitore per tale BLOB.

Un nome di contenitore dinamico è facoltativo. Supporta uno e un solo dinamico {field} nel nome del contenitore. Il campo deve esistere nei dati di output e seguire i criteri relativi al nome del contenitore.

Il tipo di dati del campo deve essere string. Per usare più campi dinamici o combinare testo statico insieme a un campo dinamico, è possibile definirlo nella query con funzioni stringa predefinite, ad esempio CONCAT e LTRIM.
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. Altre informazioni su Delta Lake.
Nome percorso differenziale Obbligatorio quando il formato di serializzazione degli eventi è Delta Lake. Percorso usato per scrivere la tabella Delta Lake all'interno del contenitore specificato. Include il nome della tabella. Per altre informazioni ed esempi, vedere Scrivere in una tabella Delta Lake.
Modalità scrittura La modalità di scrittura controlla il modo in cui Analisi di flusso di Azure scrive in un file di output. Il recapito di una sola volta avviene solo quando la modalità scrittura è Una sola volta. Per ulteriori informazioni, vedi la sezione successiva.
Colonna di partizione Facoltativo. Nome {field} dei dati di output da partizionare. È supportata una sola colonna di partizione.
Modello percorso Obbligatorio quando il formato di serializzazione degli eventi è Delta Lake. Modello di percorso del file usato per scrivere i BLOB nel contenitore specificato.

Nel modello di percorso è possibile scegliere di usare una o più istanze delle variabili di data e ora per specificare la frequenza con cui vengono scritti i BLOB: {date}, {time}.

Se la modalità di scrittura è una sola volta, è necessario usare sia {date} che {time}.

È possibile usare il partizionamento BLOB personalizzato per specificare un nome personalizzato {field} dai dati dell'evento per partizionare i BLOB. Il nome del campo è un valore alfanumerico e può includere spazi, trattini e caratteri di sottolineatura. Le restrizioni per i campi personalizzati includono quelle seguenti:
  • Se la modalità scrittura è una sola volta, non è consentito alcun nome personalizzato {field} dinamico.
  • I nomi dei campi non fanno distinzione tra maiuscole e minuscole. Ad esempio, il servizio non può distinguere tra colonna ID e colonna id.
  • I campi annidati non sono consentiti. Usare, in alternativa, un alias della query di processo per rendere flat il campo.
  • Le espressioni non possono essere usate come nome di campo.

Questa funzionalità consente di usare anche configurazioni dell'identificatore di formato data/ora personalizzate nel percorso. I formati di data/ora personalizzati devono essere specificati uno alla volta e racchiusi dalla {datetime:\<specifier>} parola chiave . Gli input consentiti per \<specifier> sono yyyy, MM, M, dd, , HHmmHmd, , sso .s La {datetime:\<specifier>} parola chiave può essere usata più volte nel percorso per formare configurazioni di data/ora personalizzate.

Esempi:
  • Esempio 1: cluster1/logs/{date}/{time}
  • Esempio 2: cluster1/logs/{date}
  • Esempio 3: cluster1/{client_id}/{date}/{time}
  • Esempio 4: cluster1/{datetime:ss}/{myField} dove la query è SELECT data.myField AS myField FROM Input;
  • Esempio 5: cluster1/year={datetime:yyyy}/month={datetime:MM}/day={datetime:dd}

Il timestamp della struttura di cartelle creata segue l'ora UTC e non l'ora locale. System.Timestamp è l'ora usata per tutto il partizionamento basato sul tempo.

La denominazione dei file usa la convenzione seguente:

{Path Prefix Pattern}/schemaHashcode_Guid_Number.extension

In questo caso, Guid rappresenta l'identificatore univoco assegnato a un writer interno creato per scrivere in un file BLOB. Il numero rappresenta l'indice del blocco BLOB.

File di output di esempio:
  • Myoutput/20170901/00/45434_gguid_1.csv
  • Myoutput/20170901/01/45434_gguid_1.csv

Per altre informazioni su questa funzionalità, visitare Partizionamento dell'output dei BLOB personalizzato in Analisi di flusso di Azure.
Formato data Obbligatorio quando il formato di serializzazione degli eventi è Delta Lake. Se nel percorso di prefisso viene usato il token di data, è possibile selezionare il formato della data in cui sono organizzati i file. Un esempio è YYYY/MM/DD.
Formato ora Obbligatorio quando il formato di serializzazione degli eventi è Delta Lake. Se nel percorso di prefisso viene usato il token dell'ora, specificare il formato dell'ora in cui sono organizzati i file.
Numero minimo di righe Numero minimo di righe per batch. Per Parquet, ogni batch crea un nuovo file. Il valore predefinito corrente è 2000 righe e il valore massimo consentito è 10.000 righe.
Tempo massimo Tempo massimo di attesa per batch. Dopo questa volta, il batch viene scritto nell'output anche se il requisito minimo delle righe non viene soddisfatto. Il valore predefinito corrente è 1 minuto e il valore massimo consentito è 2 ore. Se l'output del BLOB ha una frequenza di pattern di percorso, il tempo di attesa non può essere superiore all'intervallo di tempo della partizione.
Encoding Se si usa il formato CSV o JSON, è necessario specificare la codifica. Al momento UTF-8 è l'unico formato di codifica supportato.
Delimitatore Applicabile solo per la serializzazione CSV. Analisi di flusso supporta molti delimitatori comuni per la serializzazione dei dati CSV. I valori supportati sono virgola, punto e virgola, spazio, tabulazione e barra verticale.
Formato Applicabile solo per la serializzazione JSON. Separato da righe specifica che l'output viene formattato separando ciascun oggetto JSON con una nuova riga. Se si seleziona Separato da righe, JSON viene letto un oggetto alla volta. L'intero contenuto da solo non sarebbe un JSON valido. Matrice specifica che l'output viene formattato come matrice di oggetti JSON. Questa matrice viene chiusa solo quando il processo viene arrestato o Analisi di flusso di Azure passa all'intervallo di tempo successivo. In generale, è preferibile usare codice JSON separato da righe perché non richiede alcuna gestione speciale mentre il file di output è ancora in fase di scrittura.

Consegna esattamente una volta (anteprima pubblica)

Il recapito end-to-end esattamente una volta durante la lettura di qualsiasi input di streaming significa che i dati elaborati vengono scritti nell'output di Data Lake Storage Gen2 una sola volta senza duplicati. Quando la funzionalità è abilitata, il processo di Analisi di flusso garantisce nessuna perdita di dati e nessun duplicato generato come output, durante il riavvio avviato dall'utente dall'ultima ora di output. Semplifica la pipeline di streaming senza dover implementare e risolvere i problemi di logica di deduplicazione.

Modalità scrittura

Esistono due modi in cui Analisi di flusso scrive nell'account di archiviazione BLOB o Data Lake Storage Gen2. Un modo consiste nell'aggiungere i risultati allo stesso file o a una sequenza di file in arrivo. L'altro modo consiste nel scrivere dopo tutti i risultati per la partizione temporale, quando sono disponibili tutti i dati per la partizione temporale. Il recapito di una sola volta è abilitato quando la modalità di scrittura è Una sola volta.

Non è disponibile alcuna opzione modalità di scrittura per Delta Lake. Tuttavia, l'output delta Lake fornisce anche garanzie di tipo exactly-once usando il log Delta. Non richiede la partizione temporale e scrive i risultati in modo continuo in base ai parametri di invio in batch definiti dall'utente.

Nota

Se si preferisce non usare la funzionalità di anteprima per il recapito di tipo exactly-once, selezionare Aggiungi come risultati arrivati.

Impostazione

Per ricevere il recapito esattamente una volta per l'account di archiviazione BLOB o Data Lake Storage Gen2, è necessario configurare le impostazioni seguenti:

  • Selezionare Una volta dopo che tutti i risultati della partizione temporale sono disponibili per la modalità di scrittura.
  • Specificare Il modello di percorso con {date} e {time} specificato.
  • Specificare il formato di data e ora.

Limiti

  • Il sottostream non è supportato.
  • Path Pattern diventa una proprietà obbligatoria e deve contenere sia {date} che {time}. Non è consentito alcun nome personalizzato {field} dinamico. Altre informazioni sul modello di percorso personalizzato.
  • Se il processo viene avviato in un'ora personalizzata prima o dopo l'ora dell'ultimo output, è possibile sovrascrivere il file. Ad esempio, quando il formato ora è impostato su HH, il file viene generato ogni ora. Se si arresta il processo alle 8:15 e si riavvia il processo alle 8:30, il file generato tra le 8:00 e le 9:00 copre solo i dati dalle 8:30 alle 9:00. I dati dalle 8:00 alle 8:15 vengono persi man mano che vengono sovrascritti.

File di output BLOB

Quando si usa l'archiviazione BLOB come output, viene creato un nuovo file nel BLOB nei casi seguenti:

  • Il file supera il numero massimo di blocchi consentiti (attualmente 50.000). È possibile raggiungere il numero massimo consentito di blocchi senza raggiungere le dimensioni massime consentite per i BLOB. Ad esempio, se la frequenza di output è elevata, ogni blocco può contenere più byte e le dimensioni del file sono superiori. Se la frequenza di output è bassa, ogni blocco contiene meno dati e le dimensioni del file sono inferiori.
  • Si verifica una modifica dello schema nell'output e il formato di output richiede uno schema fisso (CSV, Avro o Parquet).
  • Un processo viene riavviato, esternamente da un utente che lo arresta e lo avvia internamente per la manutenzione del sistema o il ripristino degli errori.
  • La query è completamente partizionata e viene creato un nuovo file per ogni partizione di output. Deriva dall'uso PARTITION BY o dalla parallelizzazione nativa introdotta nel livello di compatibilità 1.2.
  • L'utente elimina un file o un contenitore dell'account di archiviazione.
  • L'output è il tempo partizionato usando il modello di prefisso del percorso e viene usato un nuovo BLOB quando la query passa all'ora successiva.
  • L'output viene partizionato da un campo personalizzato e viene creato un nuovo BLOB per ogni chiave di partizione, se non esiste.
  • L'output viene partizionato da un campo personalizzato in cui la cardinalità della chiave di partizione supera 8.000 e viene creato un nuovo BLOB per ogni chiave di partizione.

Partizionamento

Per la chiave di partizione, usare {date} i {time} token dei campi evento nel modello di percorso. Scegliere il formato della data, ad esempio YYYY/MM/DD, DD/MM/YYYYo MM-DD-YYYY. HH viene utilizzato per il formato dell'ora. L'output del BLOB può essere partizionato da un singolo attributo di {fieldname} evento personalizzato o {datetime:\<specifier>}. Il numero di writer di output segue il partizionamento di input per le query completamente parallelizzabili.

Dimensione del batch di output

Per le dimensioni massime dei messaggi, vedere limiti Archiviazione di Azure. La dimensione massima del blocco BLOB è di 4 MB e il numero massimo di blocchi BLOB è 50.000.

Limiti

  • Se viene usato un simbolo barra (/) nel modello di percorso ,ad esempio /folder2/folder3, le cartelle vuote vengono create e non sono visibili in Storage Explorer.
  • Analisi di flusso aggiunge allo stesso file nei casi in cui non è necessario un nuovo file BLOB. Potrebbe causare la generazione di più trigger se i servizi di Azure come Griglia di eventi di Azure sono configurati per essere attivati in un aggiornamento di file BLOB.
  • Analisi di flusso aggiunge a un BLOB per impostazione predefinita. Quando il formato di output è una matrice JSON, completa il file all'arresto o quando l'output passa alla partizione successiva per gli output partizionati in tempo. In alcuni casi, ad esempio un riavvio non pulito, è possibile che la parentesi quadra chiusa (]) per la matrice JSON sia mancante.