Definire una query per selezionare, filtrare e aggregare i dati
Dopo aver definito gli input e gli output per il processo di Analisi di flusso di Azure, è possibile definire una query per elaborare i dati in ingresso da un input e scrivere i risultati in un output.
Selezione dei campi di input
L'approccio più semplice per inserire i dati di streaming in Azure Synapse Analytics consiste nell'acquisire i valori di campo necessari per ogni evento usando una query SELECT...INTO, come illustrato di seguito:
SELECT
EventEnqueuedUtcTime AS ReadingTime,
SensorID,
ReadingValue
INTO
[synapse-output]
FROM
[streaming-input] TIMESTAMP BY EventEnqueuedUtcTime
Suggerimento
Quando si usa un output di Azure Synapse Analytics per scrivere i risultati in una tabella in un pool SQL dedicato, lo schema dei risultati generati dalla query deve corrispondere alla tabella in cui devono essere caricati i dati. È possibile usare clausole AS per rinominare i campi ed eseguirne il cast in tipi di dati alternativi (compatibili) in base alle esigenze.
Filtro dei dati degli eventi
In alcuni casi, potrebbe essere necessario filtrare i dati in modo da includere solo eventi specifici aggiungendo una clausola WHERE. Ad esempio, la query seguente scrive i dati solo per gli eventi con un valore di campo ReadingValue negativo.
SELECT
EventEnqueuedUtcTime AS ReadingTime,
SensorID,
ReadingValue
INTO
[synapse-output]
FROM
[streaming-input] TIMESTAMP BY EventEnqueuedUtcTime
WHERE ReadingValue < 0
Aggregazione di eventi per finestre temporali
Un modello comune per le query di streaming consiste nell'aggregare i dati degli eventi per intervalli (basati sul tempo) o finestre temporali. A tale scopo, è possibile usare una clausola GROUP BY che include una funzione Window che definisce il tipo di finestra da definire, ad esempio a cascata, di salto o scorrevole.
Suggerimento
Per altre informazioni sulle funzioni per le finestre temporali, vedere Introduzione alle funzioni delle finestre di Analisi di flusso nella documentazione di Analisi di flusso di Azure.
L'esempio seguente raggruppa le letture dei sensori di streaming in finestre a cascata di 1 minuto (seriali, non sovrapposte), registrando l'ora di inizio e fine di ogni finestra e la lettura massima per ogni sensore. La clausola HAVING filtra i risultati per includere solo le finestre in cui si è verificato almeno un evento.
SELECT
DateAdd(second, -60, System.TimeStamp) AS StartTime,
System.TimeStamp AS EndTime,
SensorID,
MAX(ReadingValue) AS MaxReading
INTO
[synapse-output]
FROM
[streaming-input] TIMESTAMP BY EventEnqueuedUtcTime
GROUP BY SensorID, TumblingWindow(second, 60)
HAVING COUNT(*) >= 1
Suggerimento
Per altre informazioni sui modelli comuni per le query, vedere Modelli di query comuni in Analisi di flusso di Azure nella documentazione di Analisi di flusso di Azure.