Esempi di query per modelli di uso comune di Analisi di flussoQuery examples for common Stream Analytics usage patterns

IntroduzioneIntroduction

Le query in Analisi di flusso di Azure sono espresse in un linguaggio di query di tipo SQL.Queries in Azure Stream Analytics are expressed in a SQL-like query language. Queste query sono documentate nella guida Informazioni di riferimento sul linguaggio di query di Analisi di flusso.These queries are documented in the Stream Analytics query language reference guide. Questo articolo illustra le soluzioni per diversi modelli di query comuni basati su scenari reali.This article outlines solutions to several common query patterns, based on real-world scenarios. È un lavoro in corso che continua a essere periodicamente aggiornato con nuovi modelli.It is a work in progress and continues to be updated with new patterns on an ongoing basis.

Esempio di query: convertire tipi di datiQuery example: Convert data types

Descrizione: definire i tipi di proprietà nel flusso di input.Description: Define the types of properties on the input stream. Il peso dell'auto, ad esempio, viene immesso nel flusso di input come stringa e deve essere convertito in INT per eseguire l'operazione SUM dei valori.For example, the car weight is coming on the input stream as strings and needs to be converted to INT to perform SUM it up.

Input:Input:

Casa automobilisticaMake TempoTime PesoWeight
HondaHonda 2015-01-01T00:00:01.0000000Z2015-01-01T00:00:01.0000000Z "1000""1000"
HondaHonda 2015-01-01T00:00:02.0000000Z2015-01-01T00:00:02.0000000Z "2000""2000"

Output:Output:

Casa automobilisticaMake PesoWeight
HondaHonda 30003000

Soluzione:Solution:

SELECT
    Make,
    SUM(CAST(Weight AS BIGINT)) AS Weight
FROM
    Input TIMESTAMP BY Time
GROUP BY
    Make,
    TumblingWindow(second, 10)

Spiegazione: usare un'istruzione CAST nel campo Peso per specificarne il tipo di dati.Explanation: Use a CAST statement in the Weight field to specify its data type. Visualizzare l'elenco dei tipi di dati supportati in Tipi di dati (Analisi di flusso di Azure).See the list of supported data types in Data types (Azure Stream Analytics).

Esempio di query: Usare Like/Not like per la corrispondenza dei modelliQuery example: Use Like/Not like to do pattern matching

Descrizione: verificare che un valore del campo dell'evento corrisponda a un determinato modello.Description: Check that a field value on the event matches a certain pattern. Verificare, ad esempio, che il risultato restituisca le targhe che iniziano per A e terminano con 9.For example, check that the result returns license plates that start with A and end with 9.

Input:Input:

Casa automobilisticaMake TargaLicensePlate TempoTime
HondaHonda ABC-123ABC-123 2015-01-01T00:00:01.0000000Z2015-01-01T00:00:01.0000000Z
ToyotaToyota AAA-999AAA-999 2015-01-01T00:00:02.0000000Z2015-01-01T00:00:02.0000000Z
NissanNissan ABC-369ABC-369 2015-01-01T00:00:03.0000000Z2015-01-01T00:00:03.0000000Z

Output:Output:

Casa automobilisticaMake TargaLicensePlate TempoTime
ToyotaToyota AAA-999AAA-999 2015-01-01T00:00:02.0000000Z2015-01-01T00:00:02.0000000Z
NissanNissan ABC-369ABC-369 2015-01-01T00:00:03.0000000Z2015-01-01T00:00:03.0000000Z

Soluzione:Solution:

SELECT
    *
FROM
    Input TIMESTAMP BY Time
WHERE
    LicensePlate LIKE 'A%9'

Spiegazione: usare l'istruzione LIKE per verificare che il valore del campo LicensePlateExplanation: Use the LIKE statement to check the LicensePlate field value. inizi con la lettera A, contenga una stringa di zeri o altri caratteri e termini con 9.It should start with an A, then have any string of zero or more characters, and then end with a 9.

Esempio di query: Specificare la logica per i diversi casi/valori (istruzioni CASE)Query example: Specify logic for different cases/values (CASE statements)

Descrizione: fornire un calcolo diverso per un campo in base un determinato criterio.Description: Provide a different computation for a field, based on a particular criterion. Fornire ad esempio una stringa descrittiva relativa al numero di automobili della stessa casa automobilistica che sono passate, con un caso speciale impostato su 1.For example, provide a string description for how many cars of the same make passed, with a special case for 1.

Input:Input:

Casa automobilisticaMake TempoTime
HondaHonda 2015-01-01T00:00:01.0000000Z2015-01-01T00:00:01.0000000Z
ToyotaToyota 2015-01-01T00:00:02.0000000Z2015-01-01T00:00:02.0000000Z
ToyotaToyota 2015-01-01T00:00:03.0000000Z2015-01-01T00:00:03.0000000Z

Output:Output:

Auto passateCarsPassed TempoTime
1 Honda1 Honda 2015-01-01T00:00:10.0000000Z2015-01-01T00:00:10.0000000Z
2 Toyota2 Toyotas 2015-01-01T00:00:10.0000000Z2015-01-01T00:00:10.0000000Z

Soluzione:Solution:

SELECT
    CASE
        WHEN COUNT(*) = 1 THEN CONCAT('1 ', Make)
        ELSE CONCAT(CAST(COUNT(*) AS NVARCHAR(MAX)), ' ', Make, 's')
    END AS CarsPassed,
    System.TimeStamp AS Time
FROM
    Input TIMESTAMP BY Time
GROUP BY
    Make,
    TumblingWindow(second, 10)

Spiegazione: la clausola CASE consente di fornire un calcolo diverso in base ad alcuni criteri (in questo esempio, il numero di automobili nella finestra di aggregazione).Explanation: The CASE clause allows us to provide a different computation, based on some criteria (in our case, the count of the cars in the aggregate window).

Esempio di query: Invio di dati a più outputQuery example: Send data to multiple outputs

Descrizione: inviare dati a più destinazioni di output da un singolo processo.Description: Send data to multiple output targets from a single job. Analizzare, ad esempio, i dati per un avviso basato su soglie e archiviare tutti gli eventi nell'archiviazione BLOB.For example, analyze data for a threshold-based alert and archive all events to blob storage.

Input:Input:

Casa automobilisticaMake TempoTime
HondaHonda 2015-01-01T00:00:01.0000000Z2015-01-01T00:00:01.0000000Z
HondaHonda 2015-01-01T00:00:02.0000000Z2015-01-01T00:00:02.0000000Z
ToyotaToyota 2015-01-01T00:00:01.0000000Z2015-01-01T00:00:01.0000000Z
ToyotaToyota 2015-01-01T00:00:02.0000000Z2015-01-01T00:00:02.0000000Z
ToyotaToyota 2015-01-01T00:00:03.0000000Z2015-01-01T00:00:03.0000000Z

Output1:Output1:

Casa automobilisticaMake TempoTime
HondaHonda 2015-01-01T00:00:01.0000000Z2015-01-01T00:00:01.0000000Z
HondaHonda 2015-01-01T00:00:02.0000000Z2015-01-01T00:00:02.0000000Z
ToyotaToyota 2015-01-01T00:00:01.0000000Z2015-01-01T00:00:01.0000000Z
ToyotaToyota 2015-01-01T00:00:02.0000000Z2015-01-01T00:00:02.0000000Z
ToyotaToyota 2015-01-01T00:00:03.0000000Z2015-01-01T00:00:03.0000000Z

Output2:Output2:

Casa automobilisticaMake TempoTime ConteggioCount
ToyotaToyota 2015-01-01T00:00:10.0000000Z2015-01-01T00:00:10.0000000Z 33

Soluzione:Solution:

SELECT
    *
INTO
    ArchiveOutput
FROM
    Input TIMESTAMP BY Time

SELECT
    Make,
    System.TimeStamp AS Time,
    COUNT(*) AS [Count]
INTO
    AlertOutput
FROM
    Input TIMESTAMP BY Time
GROUP BY
    Make,
    TumblingWindow(second, 10)
HAVING
    [Count] >= 3

Spiegazione: la clausola INTO indica all'Analisi di flusso in quali output scrivere i dati ottenuti con questa istruzione.Explanation: The INTO clause tells Stream Analytics which of the outputs to write the data to from this statement. La prima è una query pass-through dei dati ricevuti per un output denominato ArchiveOutput.The first query is a pass-through of the data we received to an output that we named ArchiveOutput. La seconda query effettua una semplice aggregazione, filtra e invia i risultati a un sistema di avviso downstream.The second query does some simple aggregation and filtering, and it sends the results to a downstream alerting system.

È anche possibile riusare i risultati delle espressioni di tabella comune (CTE), ovvero le istruzioni WITH, in più istruzioni di output.Note that you can also reuse the results of the common table expressions (CTEs) (such as WITH statements) in multiple output statements. Questa opzione offre il vantaggio aggiuntivo di aprire un numero inferiore di lettori nell'origine di input.This option has the added benefit of opening fewer readers to the input source. Ad esempio:For example:

WITH AllRedCars AS (
    SELECT
        *
    FROM
        Input TIMESTAMP BY Time
    WHERE
        Color = 'red'
)
SELECT * INTO HondaOutput FROM AllRedCars WHERE Make = 'Honda'
SELECT * INTO ToyotaOutput FROM AllRedCars WHERE Make = 'Toyota'

Esempio di query: contare valori univociQuery example: Count unique values

Descrizione: contare il numero di valori di campo univoci presenti nel flusso in un intervallo di tempo.Description: Count the number of unique field values that appear in the stream within a time window. Ad esempio, quante automobili appartenenti alla stessa casa automobilistica sono passate da un casello autostradale in una finestra di due secondi?For example, how many unique makes of cars passed through the toll booth in a 2-second window?

Input:Input:

Casa automobilisticaMake TempoTime
HondaHonda 2015-01-01T00:00:01.0000000Z2015-01-01T00:00:01.0000000Z
HondaHonda 2015-01-01T00:00:02.0000000Z2015-01-01T00:00:02.0000000Z
ToyotaToyota 2015-01-01T00:00:01.0000000Z2015-01-01T00:00:01.0000000Z
ToyotaToyota 2015-01-01T00:00:02.0000000Z2015-01-01T00:00:02.0000000Z
ToyotaToyota 2015-01-01T00:00:03.0000000Z2015-01-01T00:00:03.0000000Z

Output:Output:

ConteggioCount TempoTime
22 2015-01-01T00:00:02.000Z2015-01-01T00:00:02.000Z
11 2015-01-01T00:00:04.000Z2015-01-01T00:00:04.000Z

Soluzione:Solution:

SELECT
     COUNT(DISTINCT Make) AS CountMake,
     System.TIMESTAMP AS TIME
FROM Input TIMESTAMP BY TIME
GROUP BY 
     TumblingWindow(second, 2)

Spiegazione: COUNT(DISTINCT Make) restituisce il numero di valori distinct della colonna Casa automobilistica all'interno di una finestra temporale.Explanation: COUNT(DISTINCT Make) returns the number of distinct values in the Make column within a time window.

Esempio di query: Determinare la potenziale variazione di un valoreQuery example: Determine if a value has changed

Descrizione: esaminare un valore precedente per determinare se è diverso rispetto al valore corrente.Description: Look at a previous value to determine if it is different than the current value. L'auto precedente passata dal casello autostradale, ad esempio, è della stessa casa automobilistica dell'auto corrente?For example, is the previous car on the toll road the same make as the current car?

Input:Input:

Casa automobilisticaMake TempoTime
HondaHonda 2015-01-01T00:00:01.0000000Z2015-01-01T00:00:01.0000000Z
ToyotaToyota 2015-01-01T00:00:02.0000000Z2015-01-01T00:00:02.0000000Z

Output:Output:

Casa automobilisticaMake TempoTime
ToyotaToyota 2015-01-01T00:00:02.0000000Z2015-01-01T00:00:02.0000000Z

Soluzione:Solution:

SELECT
    Make,
    Time
FROM
    Input TIMESTAMP BY Time
WHERE
    LAG(Make, 1) OVER (LIMIT DURATION(minute, 1)) <> Make

Spiegazione: usare LAG per esaminare il flusso di input di un evento precedente e ottenere il valore Casa automobilistica.Explanation: Use LAG to peek into the input stream one event back and get the Make value. Confrontarlo quindi con il valore Casa automobilistica dell'evento corrente per restituire l'evento di variazione.Then compare it to the Make value on the current event and output the event if they are different.

Esempio di query: trovare il primo evento in una finestraQuery example: Find the first event in a window

Descrizione: trovare la prima auto in ogni intervallo di 10 minuti.Description: Find the first car in every 10-minute interval.

Input:Input:

TargaLicensePlate Casa automobilisticaMake TempoTime
DXE 5291DXE 5291 HondaHonda 27-07-2015T00:00:05.0000000Z2015-07-27T00:00:05.0000000Z
YZK 5704YZK 5704 FordFord 27-07-2015T00:02:17.0000000Z2015-07-27T00:02:17.0000000Z
RMV 8282RMV 8282 HondaHonda 27-07-2015T00:05:01.0000000Z2015-07-27T00:05:01.0000000Z
YHN 6970YHN 6970 ToyotaToyota 27-07-2015T00:06:00.0000000Z2015-07-27T00:06:00.0000000Z
VFE 1616VFE 1616 ToyotaToyota 27-07-2015T00:09:31.0000000Z2015-07-27T00:09:31.0000000Z
QYF 9358QYF 9358 HondaHonda 27-07-2015T00:12:02.0000000Z2015-07-27T00:12:02.0000000Z
MDR 6128MDR 6128 BMWBMW 27-07-2015T00:13:45.0000000Z2015-07-27T00:13:45.0000000Z

Output:Output:

TargaLicensePlate Casa automobilisticaMake TempoTime
DXE 5291DXE 5291 HondaHonda 27-07-2015T00:00:05.0000000Z2015-07-27T00:00:05.0000000Z
QYF 9358QYF 9358 HondaHonda 27-07-2015T00:12:02.0000000Z2015-07-27T00:12:02.0000000Z

Soluzione:Solution:

SELECT 
    LicensePlate,
    Make,
    Time
FROM 
    Input TIMESTAMP BY Time
WHERE 
    IsFirst(minute, 10) = 1

Si ridefinirà ora il problema per trovare la prima auto di una particolare casa automobilistica a intervalli di 10 minuti.Now let’s change the problem and find the first car of a particular make in every 10-minute interval.

TargaLicensePlate Casa automobilisticaMake TempoTime
DXE 5291DXE 5291 HondaHonda 27-07-2015T00:00:05.0000000Z2015-07-27T00:00:05.0000000Z
YZK 5704YZK 5704 FordFord 27-07-2015T00:02:17.0000000Z2015-07-27T00:02:17.0000000Z
YHN 6970YHN 6970 ToyotaToyota 27-07-2015T00:06:00.0000000Z2015-07-27T00:06:00.0000000Z
QYF 9358QYF 9358 HondaHonda 27-07-2015T00:12:02.0000000Z2015-07-27T00:12:02.0000000Z
MDR 6128MDR 6128 BMWBMW 27-07-2015T00:13:45.0000000Z2015-07-27T00:13:45.0000000Z

Soluzione:Solution:

SELECT 
    LicensePlate,
    Make,
    Time
FROM 
    Input TIMESTAMP BY Time
WHERE 
    IsFirst(minute, 10) OVER (PARTITION BY Make) = 1

Esempio di query: trovare l'ultimo evento in una finestraQuery example: Find the last event in a window

Descrizione: trovare l'ultima auto in ogni intervallo di 10 minuti.Description: Find the last car in every 10-minute interval.

Input:Input:

TargaLicensePlate Casa automobilisticaMake TempoTime
DXE 5291DXE 5291 HondaHonda 27-07-2015T00:00:05.0000000Z2015-07-27T00:00:05.0000000Z
YZK 5704YZK 5704 FordFord 27-07-2015T00:02:17.0000000Z2015-07-27T00:02:17.0000000Z
RMV 8282RMV 8282 HondaHonda 27-07-2015T00:05:01.0000000Z2015-07-27T00:05:01.0000000Z
YHN 6970YHN 6970 ToyotaToyota 27-07-2015T00:06:00.0000000Z2015-07-27T00:06:00.0000000Z
VFE 1616VFE 1616 ToyotaToyota 27-07-2015T00:09:31.0000000Z2015-07-27T00:09:31.0000000Z
QYF 9358QYF 9358 HondaHonda 27-07-2015T00:12:02.0000000Z2015-07-27T00:12:02.0000000Z
MDR 6128MDR 6128 BMWBMW 27-07-2015T00:13:45.0000000Z2015-07-27T00:13:45.0000000Z

Output:Output:

TargaLicensePlate Casa automobilisticaMake TempoTime
VFE 1616VFE 1616 ToyotaToyota 27-07-2015T00:09:31.0000000Z2015-07-27T00:09:31.0000000Z
MDR 6128MDR 6128 BMWBMW 27-07-2015T00:13:45.0000000Z2015-07-27T00:13:45.0000000Z

Soluzione:Solution:

WITH LastInWindow AS
(
    SELECT 
        MAX(Time) AS LastEventTime
    FROM 
        Input TIMESTAMP BY Time
    GROUP BY 
        TumblingWindow(minute, 10)
)
SELECT 
    Input.LicensePlate,
    Input.Make,
    Input.Time
FROM
    Input TIMESTAMP BY Time 
    INNER JOIN LastInWindow
    ON DATEDIFF(minute, Input, LastInWindow) BETWEEN 0 AND 10
    AND Input.Time = LastInWindow.LastEventTime

Spiegazione: la query si articola in due passaggi.Explanation: There are two steps in the query. Il primo rileva il timestamp più recente in finestre di 10 minuti,The first one finds the latest time stamp in 10-minute windows. il secondo unisce i risultati della prima query con il flusso originale per trovare gli eventi corrispondenti ai timestamp più recenti in ogni finestra.The second step joins the results of the first query with the original stream to find the events that match the last time stamps in each window.

Esempio di query: Rilevare l'assenza di eventiQuery example: Detect the absence of events

Descrizione: verificare che un flusso non abbia un valore corrispondente a determinati criteri.Description: Check that a stream has no value that matches a certain criterion. Ad esempio, 2 automobili consecutive della stessa casa automobilistica hanno attraversato il casello negli ultimi 90 secondi?For example, have 2 consecutive cars from the same make entered the toll road within the last 90 seconds?

Input:Input:

Casa automobilisticaMake TargaLicensePlate TempoTime
HondaHonda ABC-123ABC-123 2015-01-01T00:00:01.0000000Z2015-01-01T00:00:01.0000000Z
HondaHonda AAA-999AAA-999 2015-01-01T00:00:02.0000000Z2015-01-01T00:00:02.0000000Z
ToyotaToyota DEF-987DEF-987 2015-01-01T00:00:03.0000000Z2015-01-01T00:00:03.0000000Z
HondaHonda GHI-345GHI-345 2015-01-01T00:00:04.0000000Z2015-01-01T00:00:04.0000000Z

Output:Output:

Casa automobilisticaMake TempoTime Targa auto correnteCurrentCarLicensePlate Targa prima autoFirstCarLicensePlate Tempo prima autoFirstCarTime
HondaHonda 2015-01-01T00:00:02.0000000Z2015-01-01T00:00:02.0000000Z AAA-999AAA-999 ABC-123ABC-123 2015-01-01T00:00:01.0000000Z2015-01-01T00:00:01.0000000Z

Soluzione:Solution:

SELECT
    Make,
    Time,
    LicensePlate AS CurrentCarLicensePlate,
    LAG(LicensePlate, 1) OVER (LIMIT DURATION(second, 90)) AS FirstCarLicensePlate,
    LAG(Time, 1) OVER (LIMIT DURATION(second, 90)) AS FirstCarTime
FROM
    Input TIMESTAMP BY Time
WHERE
    LAG(Make, 1) OVER (LIMIT DURATION(second, 90)) = Make

Spiegazione: usare LAG per esaminare il flusso di input di un evento precedente e ottenere il valore Casa automobilistica.Explanation: Use LAG to peek into the input stream one event back and get the Make value. Confrontarlo quindi con il valore Casa automobilistica dell'evento corrente e, se corrispondono, restituire l'evento.Compare it to the MAKE value in the current event, and then output the event if they are the same. È possibile anche usare LAG per ottenere i dati relativi all'auto precedente.You can also use LAG to get data about the previous car.

Esempio di query: rilevare la durata tra gli eventiQuery example: Detect the duration between events

Descrizione: trovare la durata di un determinato evento.Description: Find the duration of a given event. Dato un clickstream Web, determinare ad esempio i tempi di una funzionalità.For example, given a web clickstream, determine the time spent on a feature.

Input:Input:

UtenteUser FunzionalitàFeature EventoEvent TempoTime
user@location.com RightMenuRightMenu IniziaStart 2015-01-01T00:00:01.0000000Z2015-01-01T00:00:01.0000000Z
user@location.com RightMenuRightMenu EndEnd 2015-01-01T00:00:08.0000000Z2015-01-01T00:00:08.0000000Z

Output:Output:

UtenteUser FunzionalitàFeature DurataDuration
user@location.com RightMenuRightMenu 77

Soluzione:Solution:

    SELECT
        [user], feature, DATEDIFF(second, LAST(Time) OVER (PARTITION BY [user], feature LIMIT DURATION(hour, 1) WHEN Event = 'start'), Time) as duration
    FROM input TIMESTAMP BY Time
    WHERE
        Event = 'end'

Spiegazione: usare la funzione LAST per recuperare l'ultimo valore di TIME se il tipo di evento corrisponde a Start.Explanation: Use the LAST function to retrieve the last TIME value when the event type was Start. La funzione LAST usa PARTITION BY [user] per indicare che il risultato viene calcolato per utente univoco.The LAST function uses PARTITION BY [user] to indicate that the result is computed per unique user. La query dispone di una soglia massima di 1 ora per la differenza di tempo tra gli eventi Start e Stop, ma è configurabile in base alle esigenze: (LIMIT DURATION(hour, 1).The query has a 1-hour maximum threshold for the time difference between Start and Stop events, but is configurable as needed (LIMIT DURATION(hour, 1).

Esempio di query: rilevare la durata di una condizioneQuery example: Detect the duration of a condition

Descrizione: individuare la durata di una condizione.Description: Find out how long a condition occurred. Si supponga, ad esempio, che un bug abbia generato un peso errato per tutte le automobili (oltre 20.000 libbre, pari a 9 tonnellate)For example, suppose that a bug resulted in all cars having an incorrect weight (above 20,000 pounds). e che si voglia calcolare la durata del bug.We want to compute the duration of the bug.

Input:Input:

Casa automobilisticaMake TempoTime PesoWeight
HondaHonda 2015-01-01T00:00:01.0000000Z2015-01-01T00:00:01.0000000Z 20002000
ToyotaToyota 2015-01-01T00:00:02.0000000Z2015-01-01T00:00:02.0000000Z 2500025000
HondaHonda 2015-01-01T00:00:03.0000000Z2015-01-01T00:00:03.0000000Z 2600026000
ToyotaToyota 2015-01-01T00:00:04.0000000Z2015-01-01T00:00:04.0000000Z 2500025000
HondaHonda 2015-01-01T00:00:05.0000000Z2015-01-01T00:00:05.0000000Z 2600026000
ToyotaToyota 2015-01-01T00:00:06.0000000Z2015-01-01T00:00:06.0000000Z 2500025000
HondaHonda 2015-01-01T00:00:07.0000000Z2015-01-01T00:00:07.0000000Z 2600026000
ToyotaToyota 2015-01-01T00:00:08.0000000Z2015-01-01T00:00:08.0000000Z 20002000

Output:Output:

Inizio erroreStartFault Fine erroreEndFault
2015-01-01T00:00:02.000Z2015-01-01T00:00:02.000Z 2015-01-01T00:00:07.000Z2015-01-01T00:00:07.000Z

Soluzione:Solution:

    WITH SelectPreviousEvent AS
    (
    SELECT
    *,
        LAG([time]) OVER (LIMIT DURATION(hour, 24)) as previousTime,
        LAG([weight]) OVER (LIMIT DURATION(hour, 24)) as previousWeight
    FROM input TIMESTAMP BY [time]
    )

    SELECT 
        LAG(time) OVER (LIMIT DURATION(hour, 24) WHEN previousWeight < 20000 ) [StartFault],
        previousTime [EndFault]
    FROM SelectPreviousEvent
    WHERE
        [weight] < 20000
        AND previousWeight > 20000

Spiegazione: usare LAG per visualizzare il flusso di input per 24 ore e cercare le istanze in cui StartFault e StopFault vengono intervallati in base al peso (< 20.000).Explanation: Use LAG to view the input stream for 24 hours and look for instances where StartFault and StopFault are spanned by the weight < 20000.

Esempio di query: immettere i valori mancantiQuery example: Fill missing values

Descrizione: per il flusso di eventi con i valori mancanti, generare un flusso di eventi con intervalli regolari.Description: For the stream of events that have missing values, produce a stream of events with regular intervals. Generare, ad esempio, un evento ogni 5 secondi che segnali il punto di dati più recente individuato.For example, generate an event every 5 seconds that reports the most recently seen data point.

Input:Input:

tt valuevalue
"2014-01-01T06:01:00""2014-01-01T06:01:00" 11
"2014-01-01T06:01:05""2014-01-01T06:01:05" 22
"2014-01-01T06:01:10""2014-01-01T06:01:10" 33
"2014-01-01T06:01:15""2014-01-01T06:01:15" 44
"2014-01-01T06:01:30""2014-01-01T06:01:30" 55
"2014-01-01T06:01:35""2014-01-01T06:01:35" 66

Output (prime 10 righe):Output (first 10 rows):

windowendwindowend lastevent.tlastevent.t lastevent.valuelastevent.value
2014-01-01T14:01:00.000Z2014-01-01T14:01:00.000Z 2014-01-01T14:01:00.000Z2014-01-01T14:01:00.000Z 11
2014-01-01T14:01:05.000Z2014-01-01T14:01:05.000Z 2014-01-01T14:01:05.000Z2014-01-01T14:01:05.000Z 22
2014-01-01T14:01:10.000Z2014-01-01T14:01:10.000Z 2014-01-01T14:01:10.000Z2014-01-01T14:01:10.000Z 33
2014-01-01T14:01:15.000Z2014-01-01T14:01:15.000Z 2014-01-01T14:01:15.000Z2014-01-01T14:01:15.000Z 44
2014-01-01T14:01:20.000Z2014-01-01T14:01:20.000Z 2014-01-01T14:01:15.000Z2014-01-01T14:01:15.000Z 44
2014-01-01T14:01:25.000Z2014-01-01T14:01:25.000Z 2014-01-01T14:01:15.000Z2014-01-01T14:01:15.000Z 44
2014-01-01T14:01:30.000Z2014-01-01T14:01:30.000Z 2014-01-01T14:01:30.000Z2014-01-01T14:01:30.000Z 55
2014-01-01T14:01:35.000Z2014-01-01T14:01:35.000Z 2014-01-01T14:01:35.000Z2014-01-01T14:01:35.000Z 66
2014-01-01T14:01:40.000Z2014-01-01T14:01:40.000Z 2014-01-01T14:01:35.000Z2014-01-01T14:01:35.000Z 66
2014-01-01T14:01:45.000Z2014-01-01T14:01:45.000Z 2014-01-01T14:01:35.000Z2014-01-01T14:01:35.000Z 66

Soluzione:Solution:

SELECT
    System.Timestamp AS windowEnd,
    TopOne() OVER (ORDER BY t DESC) AS lastEvent
FROM
    input TIMESTAMP BY t
GROUP BY HOPPINGWINDOW(second, 300, 5)

Spiegazione: questa query genera eventi ogni cinque secondi e restituisce l'ultimo evento ricevuto in precedenza.Explanation: This query generates events every 5 seconds and outputs the last event that was received previously. La durata della finestra di salto determina fino a quando risale la query per cercare l'evento più recente. In questo esempio, 300 secondi.The Hopping window duration determines how far back the query looks to find the latest event (300 seconds in this example).

Ottenere aiutoGet help

Per ulteriore assistenza, provare il Forum di Analisi dei flussi di Azure.For further assistance, try our Azure Stream Analytics forum.

Passaggi successiviNext steps