Definire una query per selezionare, filtrare e aggregare i dati

Completato

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.