Partizionamento dell'output dei BLOB personalizzato in Analisi di flusso di Azure
Analisi di flusso di Azure supporta il partizionamento dell'output blob personalizzato con campi o attributi personalizzati e modelli di percorso personalizzati DateTime
.
Campi o attributi personalizzati
Gli attributi o i campi personalizzati migliorano i flussi di lavoro di elaborazione e reporting downstream, consentendo un maggior controllo sull'output.
Opzioni per la chiave di partizione
La chiave di partizione, o il nome della colonna, usata per partizionare i dati di input possono contenere qualsiasi carattere accettato per i nomi BLOB. Non è possibile usare campi annidati come chiave di partizione, a meno che non vengano usati insieme agli alias. Tuttavia, è possibile usare determinati caratteri per creare una gerarchia di file. Ad esempio, per creare una colonna che combina i dati di due altre colonne per creare una chiave di partizione univoca, è possibile usare la query seguente:
SELECT name, id, CONCAT(name, "/", id) AS nameid
La chiave di partizione deve essere NVARCHAR(MAX)
, BIGINT
, FLOAT
o BIT
(livello di compatibilità 1.2 o superiore). I DateTime
tipi , Array
e Records
non sono supportati, ma possono essere usati come chiavi di partizione se vengono convertiti in stringhe. Per altre informazioni, vedere Tipi di dati di Analisi di flusso di Azure.
Esempio
Si supponga che un processo acquisisca i dati di input dalle sessioni utente live connesse a un servizio di videogiochi esterno in cui i dati inseriti contengono una colonna client_id
per identificare le sessioni. Per partizionare i dati in client_id
base a , impostare il campo Modello percorso BLOB per includere un token {client_id}
di partizione nelle proprietà di output blob quando si crea un processo. Man mano che i dati con vari client_id
valori passano attraverso il processo di Analisi di flusso, i dati di output vengono salvati in cartelle separate in base a un singolo client_id
valore per cartella.
Analogamente, se l'input del processo è costituito da dati del sensore provenienti da milioni di sensori in cui ogni sensore ha un sensor_id
, il modello di percorso consiste {sensor_id}
nel partizionare i dati di ogni sensore in cartelle diverse.
Quando si usa l'API REST, la sezione di output di un file JSON usato per tale richiesta potrebbe essere simile all'immagine seguente:
Dopo l'avvio dell'esecuzione del processo, il clients
contenitore potrebbe essere simile all'immagine seguente:
Ogni cartella può contenere più BLOB in cui ogni BLOB contiene uno o più record. Nell'esempio precedente è presente un singolo BLOB in una cartella con "06000000"
etichetta con il contenuto seguente:
Si noti che ogni record nel BLOB ha una client_id
colonna corrispondente al nome della cartella perché la colonna usata per partizionare l'output nel percorso di output era client_id
.
Limiti
Nella proprietà di output del BLOB del modello di percorso è consentita una sola chiave di partizione personalizzata. Tutti i modelli di percorso seguenti sono validi:
cluster1/{date}/{aFieldInMyData}
cluster1/{time}/{aFieldInMyData}
cluster1/{aFieldInMyData}
cluster1/{date}/{time}/{aFieldInMyData}
Se i clienti vogliono usare più campi di input, possono creare una chiave composita nella query per la partizione di percorso personalizzata nell'output BLOB usando
CONCAT
. Un esempio èselect concat (col1, col2) as compositeColumn into blobOutput from input
. Possono quindi specificarecompositeColumn
come percorso personalizzato in Archiviazione BLOB di Azure.Le chiavi di partizione non fanno distinzione tra maiuscole e minuscole, quindi le chiavi di partizione come
John
ejohn
sono equivalenti. Inoltre, le espressioni non possono essere usate come chiavi di partizione. Ad esempio,{columnA + columnB}
non funziona.Quando un flusso di input è costituito da record con cardinalità di chiave di partizione inferiore a 8.000, i record vengono aggiunti ai BLOB esistenti. Creano solo nuovi BLOB quando necessario. Se la cardinalità è superiore a 8.000, i BLOB esistenti non verranno scritti. I nuovi BLOB non verranno creati per un numero arbitrario di record con la stessa chiave di partizione.
Se l'output del BLOB è configurato come non modificabile, Analisi di flusso crea un nuovo BLOB ogni volta che vengono inviati i dati.
Modelli di percorso di data/ora personalizzati
I modelli di percorso personalizzati DateTime
consentono di specificare un formato di output allineato alle convenzioni di Streaming Hive, offrendo a Analisi di flusso la possibilità di inviare dati ad Azure HDInsight e Azure Databricks per l'elaborazione downstream. I modelli di percorso personalizzati DateTime
vengono facilmente implementati usando la datetime
parola chiave nel campo Prefisso percorso dell'output BLOB, insieme all'identificatore di formato. Un esempio è {datetime:yyyy}
.
Token supportati
I token di identificatore di formato seguenti possono essere usati da soli o in combinazione per ottenere formati personalizzati DateTime
.
Identificatore di formato | Descrizione | Risultati per l'ora di esempio 2018-01-02T10:06:08 |
---|---|---|
{datetime:yyyy} | Anno come numero di quattro cifre | 2018 |
{datetime:MM} | Mese da 01 a 12 | 01 |
{datetime:M} | Mese da 1 a 12 | 1 |
{datetime:dd} | Giorno da 01 a 31 | 02 |
{datetime:d} | Giorno da 1 a 31 | 2 |
{datetime:HH} | Ora in formato 24 ore, da 00 a 23 | 10 |
{datetime:mm} | Minuti da 00 a 60 | 06 |
{datetime:m} | Minuti da 0 a 60 | 6 |
{datetime:ss} | Secondi da 00 a 60 | 08 |
Se non si vogliono usare modelli personalizzati DateTime
, è possibile aggiungere e {date}
/o {time}
token al campo Prefisso percorso per generare un elenco a discesa con formati predefiniti DateTime
.
Estendibilità e restrizioni
È possibile usare tutti i token ({datetime:<specifier>}
) desiderati nel modello di percorso fino a raggiungere il limite di caratteri del prefisso del percorso. Gli identificatori di formato non possono essere combinati all'interno di un singolo token oltre le combinazioni già presenti negli elenchi a discesa di data e ora.
Per una partizione di percorso logs/MM/dd
:
Espressione valida | Espressione non valida |
---|---|
logs/{datetime:MM}/{datetime:dd} |
logs/{datetime:MM/dd} |
È possibile usare lo stesso identificatore di formato più volte nel prefisso del percorso. Il token deve essere ripetuto ogni volta.
Convenzioni Streaming Hive
I modelli di percorso personalizzati per l'archiviazione BLOB possono essere usati con la convenzione Di streaming Hive, che prevede che le cartelle vengano etichettate con column=
nel nome della cartella.
Un esempio è year={datetime:yyyy}/month={datetime:MM}/day={datetime:dd}/hour={datetime:HH}
.
L'output personalizzato elimina i problemi di modifica delle tabelle e l'aggiunta manuale di partizioni ai dati delle porte tra Analisi di flusso e Hive. È invece possibile aggiungere automaticamente molte cartelle usando:
MSCK REPAIR TABLE while hive.exec.dynamic.partition true
Esempio
Creare un account di archiviazione, un gruppo di risorse, un processo di Analisi di flusso e un'origine di input in base all'avvio rapido di Analisi di flusso portale di Azure. Usare gli stessi dati di esempio usati nella guida introduttiva. I dati di esempio sono disponibili anche in GitHub.
Creare un sink di output BLOB con la configurazione seguente:
Il modello di percorso completo è:
year={datetime:yyyy}/month={datetime:MM}/day={datetime:dd}
Quando si avvia il processo, una struttura di cartelle basata sul modello di percorso viene creata nel contenitore BLOB. È possibile eseguire il drill down a livello di giorno.