Usare i dati di riferimento per le ricerche in Analisi di flusso

I dati di riferimento sono un set di dati finito che è di natura statica o a modifica lenta. Viene usato per eseguire una ricerca o per aumentare i flussi di dati. I dati di riferimento sono noti anche come tabella di ricerca.

Si prenda come esempio uno scenario IoT. È possibile archiviare i metadati relativi ai sensori, che non cambiano spesso, nei dati di riferimento. È quindi possibile aggiungerlo con flussi di dati IoT in tempo reale.

Analisi di flusso di Azure carica i dati di riferimento in memoria per ottenere l'elaborazione dei flussi a bassa latenza. Per usare i dati di riferimento nel processo di Analisi di flusso, in genere si userà un join di dati di riferimento nella query.

Esempio

È possibile avere un flusso in tempo reale di eventi generati quando le automobili passano un casello. Il casello può catturare le targhe in tempo reale. Tali dati possono essere aggiunti a un set di dati statico con i dettagli di registrazione per identificare le targhe scadute.

SELECT I1.EntryTime, I1.LicensePlate, I1.TollId, R.RegistrationId  
FROM Input1 I1 TIMESTAMP BY EntryTime  
JOIN Registration R  
ON I1.LicensePlate = R.LicensePlate  
WHERE R.Expired = '1'

Analisi di flusso supporta Archiviazione BLOB di Azure e Azure SQL Database come livello di archiviazione per i dati di riferimento. È anche possibile trasformare o copiare i dati di riferimento in Archiviazione BLOB da Azure Data Factory per usare archivi dati locali e basati sul cloud.

Archiviazione BLOB di Azure

I dati di riferimento vengono modellati come sequenza di BLOB in ordine crescente della data/ora specificata nel nome del BLOB. I BLOB possono essere aggiunti solo alla fine della sequenza usando una data/ora maggiore di quella specificata dall'ultimo BLOB nella sequenza. I BLOB vengono definiti nella configurazione di input.

Per altre informazioni, vedere Usare i dati di riferimento da Archiviazione BLOB per un processo di Analisi di flusso.

Configurare i dati di riferimento BLOB

Per configurare i dati di riferimento, è prima necessario creare un input dei dati di riferimento del tipo. La tabella seguente illustra ogni proprietà che è necessario specificare quando si crea l'input dei dati di riferimento con la relativa descrizione.

Nome proprietà Descrizione
Alias di input Nome descrittivo usato nella query del processo per fare riferimento a questo input.
Account di archiviazione Nome dell'account di archiviazione in cui si trovano i BLOB. Se si trova nella stessa sottoscrizione del processo di Analisi di flusso, selezionarla nell'elenco a discesa.
Chiave dell'account di archiviazione Chiave privata associata all'account di archiviazione. Questa chiave viene popolata automaticamente se l'account di archiviazione si trova nella stessa sottoscrizione del processo di Analisi di flusso.
Contenitore di archiviazione I contenitori forniscono un raggruppamento logico per i BLOB archiviati nell'archiviazione BLOB. Quando si carica un BLOB nell'archivio BLOB, è necessario specificare un contenitore per tale BLOB.
Modello di percorso Questa proprietà obbligatoria viene usata per individuare i BLOB all'interno del contenitore specificato. All'interno del percorso è possibile scegliere di specificare una o più istanze delle variabili {date} e {time}.
Esempio 1: products/{date}/{time}/product-list.csv
Esempio 2: products/{date}/product-list.csv
Esempio 3: product-list. csv

Se il BLOB non esiste nel percorso specificato, il processo di Analisi di flusso attende per un periodo illimitato che il BLOB diventi disponibile.
Formato data [facoltativo] Se è stato usato {date} all'interno del modello di percorso specificato, selezionare il formato di data in cui i BLOB sono organizzati nell'elenco a discesa dei formati supportati.
Esempio: AAAA/MM/GG o MM/GG/AAAA
Formato ora [facoltativo] Se è stato usato {time} all'interno del modello di percorso specificato, selezionare il formato di ora in cui i BLOB sono organizzati nell'elenco a discesa dei formati supportati.
Esempio: HH, HH/mm o HH-mm
Formato di serializzazione eventi Per accertarsi che le query funzionino come previsto, l'analisi di flusso deve conoscere il formato di serializzazione usato per i flussi di dati in entrata. Per i dati di riferimento, i formati supportati sono CSV e JSON.
Codifica Al momento UTF-8 è l'unico formato di codifica supportato.

Dati di riferimento statici

È possibile che i dati di riferimento non vengano modificati. Per abilitare il supporto per i dati di riferimento statici, specificare un percorso statico nella configurazione di input.

Analisi di flusso preleva il BLOB dal percorso specificato. I token di sostituzione {date} e {time} non sono necessari. Poiché i dati di riferimento non sono modificabili in Analisi di flusso, non è consigliabile sovrascrivere un BLOB di dati di riferimento statico.

Generare i dati di riferimento in base a una pianificazione

I dati di riferimento potrebbero essere un set di dati a modifica lenta. Per aggiornare i dati di riferimento, specificare un modello di percorso nella configurazione di input usando i token di sostituzione {date} e {time}. Analisi di flusso seleziona le definizioni dei dati di riferimento aggiornate in base a questo modello di percorso.

Ad esempio, un modello di sample/{date}/{time}/products.csv con un formato di data AAAA-MM-GG e un formato di ora HH-mm indica a Analisi di flusso di raccogliere il BLOB sample/2015-04-16/17-30/products.csv aggiornato il 16 aprile 2015 alle 17:30 UTC.

Analisi di flusso analizza automaticamente i BLOB di dati di riferimento aggiornati a un intervallo di un minuto. Un BLOB con timestamp 10:30:00 potrebbe essere caricato con un piccolo ritardo, ad esempio 10:30:30. Si noterà un piccolo ritardo nel processo di Analisi di flusso che fa riferimento a questo BLOB.

Per evitare questi scenari, caricare il BLOB prima del tempo effettivo di destinazione, ovvero 10:30:00 in questo esempio. Il processo di Analisi di flusso ha ora tempo sufficiente per individuare e caricare il BLOB in memoria ed eseguire operazioni.

Nota

Attualmente, i processi di Analisi di flusso cercano l'aggiornamento del BLOB solo quando il tempo del computer passa all'ora codificata nel nome del BLOB. Ad esempio, il processo cerca sample/2015-04-16/17-30/products.csv il prima possibile, ma non prima del 16 aprile 2015 alle 17:30 UTC. Non cercherà mai un BLOB con un'ora codificata precedente all'ultima individuata.

Ad esempio, dopo che il processo trova il BLOB sample/2015-04-16/17-30/products.csv, ignora tutti i file con una data codificata precedente al 16 aprile 2015 alle 17:30. Se un BLOB in sample/2015-04-16/17-25/products.csv arrivo in ritardo viene creato nello stesso contenitore, il processo non lo userà.

In un altro esempio, sample/2015-04-16/17-30/products.csv viene prodotto solo il 16 aprile 2015 alle 10:03, ma nel contenitore non è presente alcun BLOB con una data precedente. Il processo usa quindi questo file a partire dal 16 aprile 2015 alle 10:03 e usa i dati di riferimento precedenti fino a quel momento.

Un'eccezione a questo comportamento è quando il processo deve rielaborare i dati nel tempo o quando il processo viene avviato per la prima volta.

All'ora di inizio, il processo cerca il BLOB più recente generato prima dell'ora di inizio del processo specificata. Questo comportamento garantisce che all'avvio del processo sia presente un set di dati di riferimento non vuoto . Se non è possibile trovare, il processo visualizza la diagnostica seguente: Initializing input without a valid reference data blob for UTC time <start time>.

Quando viene aggiornato un set di dati di riferimento, viene generato un log di diagnostica: Loaded new reference data from <blob path>. Per molti motivi, potrebbe essere necessario ricaricare un set di dati di riferimento precedente. Molto spesso, il motivo è quello di rielaborare i dati passati. Lo stesso log di diagnostica viene generato in quel momento. Questa azione non implica che i dati del flusso corrente useranno dati di riferimento precedenti.

È possibile usare Azure Data Factory per orchestrare l'attività di creazione dei BLOB aggiornati richiesti da Analisi di flusso per aggiornare le definizioni dei dati di riferimento.

Data factory è un servizio di integrazione delle informazioni basato sul cloud che permette di automatizzare lo spostamento e la trasformazione dei dati. Data Factory supporta la connessione a un numero elevato di archivi dati locali e basati sul cloud. Può spostare facilmente i dati in base a una pianificazione regolare specificata.

Per altre informazioni su come configurare una pipeline di Data Factory per generare dati di riferimento per Analisi di flusso che vengono aggiornati in base a una pianificazione predefinita, vedere questo esempio di GitHub.

Suggerimenti sull'aggiornamento dei dati di riferimento BLOB

  • Non sovrascrivere i BLOB di dati di riferimento perché non sono modificabili.
  • Il modo consigliato per aggiornare i dati di riferimento è il seguente:
    • Usare {date}/{time} nel modello di percorso.
    • Aggiungere un nuovo BLOB usando lo stesso contenitore e lo stesso modello di percorso definito nell'input del processo.
    • Usare un valore di data/ora maggiore rispetto a quello specificato dall'ultimo BLOB nella sequenza.
  • I BLOB di dati di riferimento non vengono ordinati in base all'ora dell'ultima modifica del BLOB. Vengono ordinati solo in base alla data e all'ora specificate nel nome del BLOB usando le sostituzioni {date} e {time}.
  • Per evitare di dover elencare un numero elevato di BLOB, eliminare i BLOB precedenti per cui l'elaborazione non verrà più eseguita. Analisi di flusso potrebbe dover rielaborare una piccola quantità in alcuni scenari, ad esempio un riavvio.

Database SQL di Azure

Il processo di Analisi di flusso recupera database SQL dati di riferimento e li archivia come snapshot in memoria per l'elaborazione. Lo snapshot dei dati di riferimento viene archiviato anche in un contenitore in un account di archiviazione. Specificare l'account di archiviazione nelle impostazioni di configurazione.

Il contenitore viene creato automaticamente all'avvio del processo. Se il processo si arresta o immette uno stato di errore, i contenitori creati automaticamente vengono eliminati al riavvio del processo.

Se i dati di riferimento sono un set di dati a modifica lenta, è necessario aggiornare periodicamente lo snapshot usato nel processo.

Con Analisi di flusso è possibile impostare una frequenza di aggiornamento quando si configura la connessione di input database SQL. Il runtime di Analisi di flusso esegue una query sull'istanza di database SQL all'intervallo specificato dalla frequenza di aggiornamento. La frequenza di aggiornamento più veloce supportata è una volta al minuto. Per ogni aggiornamento, Analisi di flusso archivia un nuovo snapshot nell'account di archiviazione specificato.

Analisi di flusso offre due opzioni per l'esecuzione di query nell'istanza di database SQL. Una query snapshot è obbligatoria e deve essere inclusa in ogni processo. Analisi di flusso esegue periodicamente la query snapshot in base all'intervallo di aggiornamento. Usa il risultato della query (snapshot) come set di dati di riferimento.

La query snapshot deve adattarsi alla maggior parte degli scenari. Se si verificano problemi di prestazioni con set di dati di grandi dimensioni e frequenze di aggiornamento rapido, usare l'opzione di query delta. Le query che richiedono più di 60 secondi per restituire un set di dati di riferimento generano un timeout.

Con l'opzione di query delta, Analisi di flusso esegue inizialmente la query snapshot per ottenere un set di dati di riferimento di base. Successivamente, Analisi di flusso esegue periodicamente la query differenziale in base all'intervallo di aggiornamento per recuperare le modifiche incrementali. Queste modifiche incrementali vengono applicate continuamente al set di dati di riferimento per mantenerle aggiornate. L'uso dell'opzione di query differenziale potrebbe contribuire a ridurre i costi di archiviazione e le operazioni di I/O di rete.

Configurare i dati di riferimento database SQL

Per configurare i dati di riferimento database SQL, è prima necessario creare l'input dei dati di riferimento. La tabella seguente illustra ogni proprietà che è necessario specificare quando si crea l'input dei dati di riferimento con la relativa descrizione. Per altre informazioni, vedere Usare i dati di riferimento di un database SQL per un processo di Analisi di flusso.

È possibile usare Istanza gestita di SQL di Azure come input di dati di riferimento. È necessario configurare un endpoint pubblico in Istanza gestita di SQL. Configurare quindi manualmente le impostazioni seguenti in Analisi di flusso. Una macchina virtuale di Azure che esegue SQL Server con un database collegato è supportata anche dalla configurazione manuale di queste impostazioni.

Nome proprietà Descrizione
Alias di input Nome descrittivo usato nella query del processo per fare riferimento a questo input.
Subscription Sottoscrizione in uso.
Database Istanza di database SQL che contiene i dati di riferimento. Per Istanza gestita di SQL, è necessario specificare la porta 3342. Un esempio è sampleserver.public.database.windows.net,3342.
Username Nome utente associato all'istanza di database SQL.
Password Password associata all'istanza di database SQL.
Aggiorna periodicamente Questa opzione consente di selezionare una frequenza di aggiornamento. Selezionare per specificare la frequenza di aggiornamento in DD:HH:MM.
Query snapshot Questa opzione di query predefinita recupera i dati di riferimento dall'istanza di database SQL.
Query delta Per scenari avanzati con set di dati di grandi dimensioni e una frequenza di aggiornamento breve, aggiungere una query differenziale.

Limitazione delle dimensioni

Usare set di dati di riferimento inferiori a 300 MB per ottenere prestazioni ottimali. I set di dati di riferimento da 5 GB o inferiori sono supportati nei processi con sei unità di streaming o più. L'uso di un set di dati di riferimento di grandi dimensioni può influire sulla latenza end-to-end del processo.

La complessità delle query può aumentare in modo da includere l'elaborazione con stato, ad esempio aggregazioni finestrate, join temporali e funzioni di analisi temporale. Quando la complessità aumenta, la dimensione massima supportata dei dati di riferimento diminuisce.

Se Analisi di flusso non riesce a caricare i dati di riferimento ed eseguire operazioni complesse, il processo esaurisce la memoria e non riesce. In questi casi, la metrica di utilizzo dell'unità di streaming raggiungerà il 100%.

Numero di unità di streaming Dimensioni consigliate
1 50 MB o inferiore
3 150 MB o inferiore
6 e oltre 5 GB o inferiori

Il supporto per la compressione non è disponibile per i dati di riferimento. Per i set di dati di riferimento superiori a 300 MB, usare database SQL come origine con l'opzione di query delta per ottenere prestazioni ottimali. Se l'opzione di query differenziale non viene usata in questi scenari, verranno visualizzati picchi nella metrica di ritardo limite ogni volta che il set di dati di riferimento viene aggiornato.

Aggiungere più set di dati di riferimento in un processo

È possibile unire un input di dati di riferimento solo a un input di streaming. Per unire più set di dati di riferimento, suddividere la query in più passaggi. Ecco un esempio:

With Step1 as (
    --JOIN input stream with reference data to get 'Desc'
    SELECT streamInput.*, refData1.Desc as Desc
    FROM    streamInput
    JOIN    refData1 ON refData1.key = streamInput.key 
)
--Now Join Step1 with second reference data
SELECT *
INTO    output 
FROM    Step1
JOIN    refData2 ON refData2.Desc = Step1.Desc 

processi IoT Edge

Solo i dati di riferimento locali sono supportati per i processi perimetrali di Analisi di flusso. Quando un processo viene distribuito in un dispositivo IoT Edge, carica i dati di riferimento dal percorso del file definito dall'utente. Tenere un file di dati di riferimento pronto nel dispositivo.

Per un contenitore Windows, inserire il file di dati di riferimento nell'unità locale e condividere l'unità locale con il contenitore Docker. Per un contenitore Linux, creare un volume Docker e popolare il file di dati nel volume.

I dati di riferimento in un aggiornamento IoT Edge vengono attivati da una distribuzione. Dopo l'attivazione, il modulo analisi di flusso seleziona i dati aggiornati senza arrestare il processo in esecuzione.

È possibile aggiornare i dati di riferimento in due modi:

  • Aggiornare il percorso dei dati di riferimento nel processo di Analisi di flusso dal portale di Azure.
  • Aggiornare la distribuzione IoT Edge.

Passaggi successivi