Typowe wzorce zapytań w Azure Stream AnalyticsCommon query patterns in Azure Stream Analytics

Zapytania w Azure Stream Analytics są wyrażane w języku zapytań przypominającym język SQL.Queries in Azure Stream Analytics are expressed in a SQL-like query language. Konstrukcje językowe są udokumentowane w podręczniku Skorowidz języka zapytań Stream Analytics .The language constructs are documented in the Stream Analytics query language reference guide.

W projekcie zapytania można jasno utworzyć prostą logikę przekazującą, aby przenieść dane zdarzenia z jednego strumienia wejściowego do wyjściowego magazynu danych. może to spowodować rozbudowane dopasowanie wzorców i analizy czasowej w celu obliczenia agregacji w różnych oknach czasu, jak w przypadku tworzenia rozwiązania IoT za pomocą przewodnika Stream Analytics.The query design can express simple pass-through logic to move event data from one input stream into an output data store, or it can do rich pattern matching and temporal analysis to calculate aggregates over various time windows as in the Build an IoT solution by using Stream Analytics guide. Można przyłączyć dane z wielu wejść do łączenia zdarzeń przesyłania strumieniowego, a także odszukać statyczne dane referencyjne w celu wzbogacania wartości zdarzeń.You can join data from multiple inputs to combine streaming events, and you can do lookups against static reference data to enrich the event values. Możesz również zapisywać dane w wielu danych wyjściowych.You can also write data to multiple outputs.

W tym artykule przedstawiono rozwiązania kilku typowych wzorców zapytań w oparciu o rzeczywiste scenariusze.This article outlines solutions to several common query patterns based on real-world scenarios.

Obsługiwane formaty danychSupported Data Formats

Azure Stream Analytics obsługuje przetwarzanie zdarzeń w formatach danych CSV, JSON i Avro.Azure Stream Analytics supports processing events in CSV, JSON and Avro data formats.

Zarówno kod JSON, jak i Avro mogą zawierać złożone typy, takie jak obiekty zagnieżdżone (rekordy) lub tablice.Both JSON and Avro may contain complex types such as nested objects (records) or arrays. Aby uzyskać więcej informacji na temat pracy z tymi złożonymi typami danych, zapoznaj się z artykułem Analizowanie danych JSON i Avro .For more information on working with these complex data types, refer to the Parsing JSON and AVRO data article.

Proste zapytanie przekazywaneSimple pass-through query

Proste zapytanie przekazywane może służyć do kopiowania danych strumienia wejściowego do danych wyjściowych.A simple pass-through query can be used to copy the input stream data into the output. Na przykład, jeśli strumień danych zawierający informacje o pojeździe w czasie rzeczywistym muszą zostać zapisane w bazie danych SQL na potrzeby analizy liter, zadanie zostanie przetworzone przez proste zapytanie przekazujące.For example, if a stream of data containing real-time vehicle information needs to be saved in a SQL database for letter analysis, a simple pass-through query will do the job.

Dane wejściowe:Input:

TworzenieMake CzasTime WagaWeight
Make1Make1 2015-01-01T00:00:01.0000000 Z2015-01-01T00:00:01.0000000Z "1000""1000"
Make1Make1 2015-01-01T00:00:02.0000000 Z2015-01-01T00:00:02.0000000Z "2000""2000"

Dane wyjściowe:Output:

TworzenieMake CzasTime WagaWeight
Make1Make1 2015-01-01T00:00:01.0000000 Z2015-01-01T00:00:01.0000000Z "1000""1000"
Make1Make1 2015-01-01T00:00:02.0000000 Z2015-01-01T00:00:02.0000000Z "2000""2000"

Zapytanie:Query:

SELECT
    *
INTO Output
FROM Input

Kwerenda SELECT * tworzy projekty wszystkich pól zdarzenia przychodzącego i wysyła je do danych wyjściowych.A SELECT * query projects all the fields of an incoming event and sends them to the output. W ten sam sposób Wybierz opcję można również użyć do tylko pól wymaganych przez projekt z danych wejściowych.The same way, SELECT can also be used to only project required fields from the input. W tym przykładzie, jeśli Marka i czas są jedynymi wymaganymi polami do zapisania, te pola można określić w instrukcji SELECT .In this example, if vehicle Make and Time are the only required fields to be saved, those fields can be specified in the SELECT statement.

Dane wejściowe:Input:

TworzenieMake CzasTime WagaWeight
Make1Make1 2015-01-01T00:00:01.0000000 Z2015-01-01T00:00:01.0000000Z 10001000
Make1Make1 2015-01-01T00:00:02.0000000 Z2015-01-01T00:00:02.0000000Z 20002000
Make2Make2 2015-01-01T00:00:04.0000000 Z2015-01-01T00:00:04.0000000Z 15001500

Dane wyjściowe:Output:

TworzenieMake CzasTime
Make1Make1 2015-01-01T00:00:01.0000000 Z2015-01-01T00:00:01.0000000Z
Make1Make1 2015-01-01T00:00:02.0000000 Z2015-01-01T00:00:02.0000000Z
Make2Make2 2015-01-01T00:00:04.0000000 Z2015-01-01T00:00:04.0000000Z

Zapytanie:Query:

SELECT
    Make, Time
INTO Output
FROM Input

Agregacja danych w czasieData aggregation over time

W celu obliczenia informacji w przedziale czasu dane można agregować jednocześnie.To compute information over a time window, data can be aggregated together. W tym przykładzie liczba jest obliczana w ciągu ostatnich 10 minut czasu dla każdego określonego samochodu.In this example, a count is computed over the last 10 minutes of time for every specific car make.

Dane wejściowe:Input:

TworzenieMake CzasTime WagaWeight
Make1Make1 2015-01-01T00:00:01.0000000 Z2015-01-01T00:00:01.0000000Z 10001000
Make1Make1 2015-01-01T00:00:02.0000000 Z2015-01-01T00:00:02.0000000Z 20002000
Make2Make2 2015-01-01T00:00:04.0000000 Z2015-01-01T00:00:04.0000000Z 15001500

Dane wyjściowe:Output:

TworzenieMake LiczbaCount
Make1Make1 22
Make2Make2 11

Zapytanie:Query:

SELECT
    Make,
    COUNT(*) AS Count
FROM
    Input TIMESTAMP BY Time
GROUP BY
    Make,
    TumblingWindow(second, 10)

Ta agregacja grupuje samochody według marki i liczy je co 10 sekund.This aggregation groups the cars by Make and counts them every 10 seconds. Dane wyjściowe zawierają Marka i liczbę samochodów, za pomocą których nastąpiło połączenie.The output has the Make and Count of cars that went through the toll.

TumblingWindow to funkcja okienkowa służąca do grupowania zdarzeń razem.TumblingWindow is a windowing function used to group events together. Agregację można zastosować dla wszystkich pogrupowanych zdarzeń.An aggregation can be applied over all grouped events. Aby uzyskać więcej informacji, zobacz Windowing Functions.For more information, see windowing functions.

Aby uzyskać więcej informacji na temat agregacji, zobacz funkcje agregujące.For more information on aggregation, refer to aggregate functions.

Konwersja danychData conversion

Dane mogą być rzutowane w czasie rzeczywistym za pomocą metody Cast .Data can be cast in real-time using the CAST method. Na przykład wagi samochodu mogą być konwertowane z typu nvarchar (max) na typ bigint i używane w obliczeniach liczbowych.For example, car weight can be converted from type nvarchar(max) to type bigint and be used on a numeric calculation.

Dane wejściowe:Input:

TworzenieMake CzasTime WagaWeight
Make1Make1 2015-01-01T00:00:01.0000000 Z2015-01-01T00:00:01.0000000Z "1000""1000"
Make1Make1 2015-01-01T00:00:02.0000000 Z2015-01-01T00:00:02.0000000Z "2000""2000"

Dane wyjściowe:Output:

TworzenieMake WagaWeight
Make1Make1 30003000

Zapytanie:Query:

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

Użyj instrukcji Cast , aby określić typ danych.Use a CAST statement to specify its data type. Zapoznaj się z listą obsługiwanych typów danych w typach danych (Azure Stream Analytics).See the list of supported data types on Data types (Azure Stream Analytics).

Aby uzyskać więcej informacji na temat funkcji konwersji danych.For more information on data conversion functions.

Ciąg pasujący do typu LIKE i NOT LIKEString matching with LIKE and NOT LIKE

Podobnie jak i nie podoba się, można użyć do sprawdzenia, czy pole pasuje do określonego wzorca.LIKE and NOT LIKE can be used to verify if a field matches a certain pattern. Na przykład można utworzyć filtr w celu zwrócenia tylko płyt z licencjami, które zaczynają się od litery "A" i kończą się cyfrą 9.For example, a filter can be created to return only the license plates that start with the letter 'A' and end with the number 9.

Dane wejściowe:Input:

TworzenieMake License_plateLicense_plate CzasTime
Make1Make1 ABC-123ABC-123 2015-01-01T00:00:01.0000000 Z2015-01-01T00:00:01.0000000Z
Make2Make2 AAA-999AAA-999 2015-01-01T00:00:02.0000000 Z2015-01-01T00:00:02.0000000Z
Make3Make3 ABC-369ABC-369 2015-01-01T00:00:03.0000000 Z2015-01-01T00:00:03.0000000Z

Dane wyjściowe:Output:

TworzenieMake License_plateLicense_plate CzasTime
Make2Make2 AAA-999AAA-999 2015-01-01T00:00:02.0000000 Z2015-01-01T00:00:02.0000000Z
Make3Make3 ABC-369ABC-369 2015-01-01T00:00:03.0000000 Z2015-01-01T00:00:03.0000000Z

Zapytanie:Query:

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

Użyj instrukcji like , aby sprawdzić wartość pola License_plate .Use the LIKE statement to check the License_plate field value. Powinna zaczynać się literą "A", a następnie zawierać dowolny ciąg składający się z zero lub więcej znaków, kończący się cyfrą 9.It should start with the letter 'A', then have any string of zero or more characters, ending with the number 9.

Określanie logiki dla różnych przypadków/wartości (instrukcje CASE)Specify logic for different cases/values (CASE statements)

Instrukcje Case mogą udostępniać różne obliczenia dla różnych pól w oparciu o określone kryterium.CASE statements can provide different computations for different fields, based on particular criterion. Na przykład Przypisz Tor "A" do samochodów Make1 i Lane "B" do innych.For example, assign lane 'A' to cars of Make1 and lane 'B' to any other make.

Dane wejściowe:Input:

TworzenieMake CzasTime
Make1Make1 2015-01-01T00:00:01.0000000 Z2015-01-01T00:00:01.0000000Z
Make2Make2 2015-01-01T00:00:02.0000000 Z2015-01-01T00:00:02.0000000Z
Make2Make2 2015-01-01T00:00:03.0000000 Z2015-01-01T00:00:03.0000000Z

Dane wyjściowe:Output:

TworzenieMake Dispatch_to_laneDispatch_to_lane CzasTime
Make1Make1 Z"A" 2015-01-01T00:00:01.0000000 Z2015-01-01T00:00:01.0000000Z
Make2Make2 B"B" 2015-01-01T00:00:02.0000000 Z2015-01-01T00:00:02.0000000Z

Rozwiązanie:Solution:

SELECT
    Make
    CASE
        WHEN Make = "Make1" THEN "A"
        ELSE "B"
    END AS Dispatch_to_lane,
    System.TimeStamp() AS Time
FROM
    Input TIMESTAMP BY Time

Wyrażenie Case porównuje wyrażenie z zestawem prostych wyrażeń, aby określić jego wynik.The CASE expression compares an expression to a set of simple expressions to determine its result. W tym przykładzie pojazdy Make1 są wysyłane do toru "A", a wszystkie inne marki mają przypisany Tor "B".In this example, vehicles of Make1 are dispatched to lane 'A' while vehicles of any other make will be assigned lane 'B'.

Aby uzyskać więcej informacji, zobacz wyrażenie CASE.For more information, refer to case expression.

Wysyłanie danych do wielu wyjśćSend data to multiple outputs

Można użyć wielu instrukcji SELECT do wyprowadzania danych do różnych ujścia danych wyjściowych.Multiple SELECT statements can be used to output data to different output sinks. Na przykład jeden wybór może wyprowadzić alert oparty na progu, podczas gdy inny może generować zdarzenia do magazynu obiektów BLOB.For example, one SELECT can output a threshold-based alert while another one can output events to blob storage.

Dane wejściowe:Input:

TworzenieMake CzasTime
Make1Make1 2015-01-01T00:00:01.0000000 Z2015-01-01T00:00:01.0000000Z
Make1Make1 2015-01-01T00:00:02.0000000 Z2015-01-01T00:00:02.0000000Z
Make2Make2 2015-01-01T00:00:01.0000000 Z2015-01-01T00:00:01.0000000Z
Make2Make2 2015-01-01T00:00:02.0000000 Z2015-01-01T00:00:02.0000000Z
Make2Make2 2015-01-01T00:00:03.0000000 Z2015-01-01T00:00:03.0000000Z

ArchiveOutput wyjściowy:Output ArchiveOutput:

TworzenieMake CzasTime
Make1Make1 2015-01-01T00:00:01.0000000 Z2015-01-01T00:00:01.0000000Z
Make1Make1 2015-01-01T00:00:02.0000000 Z2015-01-01T00:00:02.0000000Z
Make2Make2 2015-01-01T00:00:01.0000000 Z2015-01-01T00:00:01.0000000Z
Make2Make2 2015-01-01T00:00:02.0000000 Z2015-01-01T00:00:02.0000000Z
Make2Make2 2015-01-01T00:00:03.0000000 Z2015-01-01T00:00:03.0000000Z

AlertOutput wyjściowy:Output AlertOutput:

TworzenieMake CzasTime LiczbaCount
Make2Make2 2015-01-01T00:00:10.0000000 Z2015-01-01T00:00:10.0000000Z 33

Zapytanie:Query:

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

Klauzula into informuje Stream Analytics, do których danych wyjściowych należy zapisywać dane.The INTO clause tells Stream Analytics which of the outputs to write the data to. Pierwszy wybór definiuje kwerendę przekazującą, która odbiera dane z danych wejściowych i wysyła je do danych wyjściowych o nazwie ArchiveOutput.The first SELECT defines a pass-through query that receives data from the input and sends it to the output named ArchiveOutput. Drugie zapytanie wykonuje pewne proste agregacje i filtrowanie przed wysłaniem wyników do wyjściowego wyjścia systemu o nazwie AlertOutput.The second query does some simple aggregation and filtering before sending the results to a downstream alerting system output called AlertOutput.

Należy zauważyć, że klauzula with może służyć do definiowania wielu bloków podzapytań.Note that the WITH clause can be used to define multiple sub-query blocks. W przypadku tej opcji można otworzyć mniejszą liczbę czytelników do źródła danych wejściowych.This option has the benefit of opening fewer readers to the input source.

Zapytanie:Query:

WITH ReaderQuery AS (
    SELECT
        *
    FROM
        Input TIMESTAMP BY Time
)

SELECT * INTO ArchiveOutput FROM ReaderQuery

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

Aby uzyskać więcej informacji, zapoznaj się z klauzulą with .For more information, refer to WITH clause.

Zlicz unikatowe wartościCount unique values

Liczba i różne mogą służyć do zliczania wartości unikatowych pól, które pojawiają się w strumieniu w przedziale czasu.COUNT and DISTINCT can be used to count the number of unique field values that appear in the stream within a time window. Zapytanie można utworzyć, aby obliczyć, ile unikatowych przepływów samochodów przechodzą przez połączenie płatne w 2-sekundowym oknie.A query can be created to calculate how many unique Makes of cars passed through the toll booth in a 2-second window.

Dane wejściowe:Input:

TworzenieMake CzasTime
Make1Make1 2015-01-01T00:00:01.0000000 Z2015-01-01T00:00:01.0000000Z
Make1Make1 2015-01-01T00:00:02.0000000 Z2015-01-01T00:00:02.0000000Z
Make2Make2 2015-01-01T00:00:01.0000000 Z2015-01-01T00:00:01.0000000Z
Make2Make2 2015-01-01T00:00:02.0000000 Z2015-01-01T00:00:02.0000000Z
Make2Make2 2015-01-01T00:00:03.0000000 Z2015-01-01T00:00:03.0000000Z

Dane wyjściowe:Output:

Count_makeCount_make CzasTime
22 2015-01-01T00:00:02.000 Z2015-01-01T00:00:02.000Z
11 2015-01-01T00:00:04.000 Z2015-01-01T00:00:04.000Z

Zapytanie:Query:

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

Licznik (różne marki) zwraca liczbę unikatowych wartości w kolumnie Utwórz w przedziale czasu.COUNT(DISTINCT Make) returns the count of distinct values in the Make column within a time window. Aby uzyskać więcej informacji, zapoznaj się z funkcją agregującą Count .For more information, refer to COUNT aggregate function.

Obliczenia względem przeszłych zdarzeńCalculation over past events

Funkcja lag może służyć do przeglądania przeszłych zdarzeń w przedziale czasu i porównywania ich z bieżącym zdarzeniem.The LAG function can be used to look at past events within a time window and compare them against the current event. Na przykład bieżące działanie samochodu może zostać wystawione, jeśli różni się od ostatniego samochodu, za pośrednictwem którego nastąpiło połączenie.For example, the current car make can be outputted if it is different from the last car that went through the toll.

Dane wejściowe:Input:

TworzenieMake CzasTime
Make1Make1 2015-01-01T00:00:01.0000000 Z2015-01-01T00:00:01.0000000Z
Make2Make2 2015-01-01T00:00:02.0000000 Z2015-01-01T00:00:02.0000000Z

Dane wyjściowe:Output:

TworzenieMake CzasTime
Make2Make2 2015-01-01T00:00:02.0000000 Z2015-01-01T00:00:02.0000000Z

Zapytanie:Query:

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

Użyj opóźnienia , aby wejść do strumienia wejściowego o jedno zdarzenie z powrotem, pobierając wartość Utwórz i porównując ją z wartością w bieżącym zdarzeniu i wyjściowym zdarzenia.Use LAG to peek into the input stream one event back, retrieving the Make value and comparing it to the Make value of the current event and output the event.

Aby uzyskać więcej informacji, zapoznaj się z opóźnieniem.For more information, refer to LAG.

Pobieranie pierwszego zdarzenia w oknieRetrieve the first event in a window

Nie można użyć elementu isfirst do pobrania pierwszego zdarzenia w przedziale czasu.IsFirst can be used to retrieve the first event in a time window. Na przykład umieszczanie pierwszego samochodu w każdym 10-minutowym przedziale czasu.For example, outputting the first car information at every 10-minute interval.

Dane wejściowe:Input:

License_plateLicense_plate TworzenieMake CzasTime
DXE 5291DXE 5291 Make1Make1 2015-07-27T00:00:05.0000000 Z2015-07-27T00:00:05.0000000Z
YZK 5704YZK 5704 Make3Make3 2015-07-27T00:02:17.0000000 Z2015-07-27T00:02:17.0000000Z
RMV 8282RMV 8282 Make1Make1 2015-07-27T00:05:01.0000000 Z2015-07-27T00:05:01.0000000Z
YHN 6970YHN 6970 Make2Make2 2015-07-27T00:06:00.0000000 Z2015-07-27T00:06:00.0000000Z
VFE 1616VFE 1616 Make2Make2 2015-07-27T00:09:31.0000000 Z2015-07-27T00:09:31.0000000Z
QYF 9358QYF 9358 Make1Make1 2015 — 07-27T00:12:02.0000000 Z2015-07-27T00:12:02.0000000Z
MDR 6128MDR 6128 Make4Make4 2015-07-27T00:13:45.0000000 Z2015-07-27T00:13:45.0000000Z

Dane wyjściowe:Output:

License_plateLicense_plate TworzenieMake CzasTime
DXE 5291DXE 5291 Make1Make1 2015-07-27T00:00:05.0000000 Z2015-07-27T00:00:05.0000000Z
QYF 9358QYF 9358 Make1Make1 2015 — 07-27T00:12:02.0000000 Z2015-07-27T00:12:02.0000000Z

Zapytanie:Query:

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

Isfirst może również podzielić dane na partycje i obliczyć pierwsze zdarzenie do każdego określonego samochodu, co jest dostępne co 10 minut.IsFirst can also partition the data and calculate the first event to each specific car Make found at every 10-minute interval.

Dane wyjściowe:Output:

License_plateLicense_plate TworzenieMake CzasTime
DXE 5291DXE 5291 Make1Make1 2015-07-27T00:00:05.0000000 Z2015-07-27T00:00:05.0000000Z
YZK 5704YZK 5704 Make3Make3 2015-07-27T00:02:17.0000000 Z2015-07-27T00:02:17.0000000Z
YHN 6970YHN 6970 Make2Make2 2015-07-27T00:06:00.0000000 Z2015-07-27T00:06:00.0000000Z
QYF 9358QYF 9358 Make1Make1 2015 — 07-27T00:12:02.0000000 Z2015-07-27T00:12:02.0000000Z
MDR 6128MDR 6128 Make4Make4 2015-07-27T00:13:45.0000000 Z2015-07-27T00:13:45.0000000Z

Zapytanie:Query:

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

Aby uzyskać więcej informacji, zobacz isfirst.For more information, refer to IsFirst.

Zwróć ostatnie zdarzenie w oknieReturn the last event in a window

Ponieważ zdarzenia są używane przez system w czasie rzeczywistym, nie istnieje funkcja, która może określić, czy zdarzenie będzie ostatnim, aby dotrzeć do tego okna.As events are consumed by the system in real-time, there is no function that can determine if an event will be the last one to arrive for that window of time. Aby to osiągnąć, strumień wejściowy musi być przyłączony do innego, gdzie czas zdarzenia jest maksymalny dla wszystkich zdarzeń w tym oknie.To achieve this, the input stream needs to be joined with another where the time of an event is the maximum time for all events at that window.

Dane wejściowe:Input:

License_plateLicense_plate TworzenieMake CzasTime
DXE 5291DXE 5291 Make1Make1 2015-07-27T00:00:05.0000000 Z2015-07-27T00:00:05.0000000Z
YZK 5704YZK 5704 Make3Make3 2015-07-27T00:02:17.0000000 Z2015-07-27T00:02:17.0000000Z
RMV 8282RMV 8282 Make1Make1 2015-07-27T00:05:01.0000000 Z2015-07-27T00:05:01.0000000Z
YHN 6970YHN 6970 Make2Make2 2015-07-27T00:06:00.0000000 Z2015-07-27T00:06:00.0000000Z
VFE 1616VFE 1616 Make2Make2 2015-07-27T00:09:31.0000000 Z2015-07-27T00:09:31.0000000Z
QYF 9358QYF 9358 Make1Make1 2015 — 07-27T00:12:02.0000000 Z2015-07-27T00:12:02.0000000Z
MDR 6128MDR 6128 Make4Make4 2015-07-27T00:13:45.0000000 Z2015-07-27T00:13:45.0000000Z

Dane wyjściowe:Output:

License_plateLicense_plate TworzenieMake CzasTime
VFE 1616VFE 1616 Make2Make2 2015-07-27T00:09:31.0000000 Z2015-07-27T00:09:31.0000000Z
MDR 6128MDR 6128 Make4Make4 2015-07-27T00:13:45.0000000 Z2015-07-27T00:13:45.0000000Z

Zapytanie:Query:

WITH LastInWindow AS
(
    SELECT 
        MAX(Time) AS LastEventTime
    FROM 
        Input TIMESTAMP BY Time
    GROUP BY 
        TumblingWindow(minute, 10)
)

SELECT 
    Input.License_plate,
    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

Pierwszy krok zapytania znajduje maksymalną sygnaturę czasową w 10-minutowym systemie Windows, czyli sygnaturę czasową ostatniego zdarzenia dla tego okna.The first step on the query finds the maximum time stamp in 10-minute windows, that is the time stamp of the last event for that window. Drugi krok sprzęga wyniki pierwszego zapytania z oryginalnym strumieniem, aby znaleźć zdarzenie zgodne z ostatnimi sygnaturami czasowymi w poszczególnych oknach.The second step joins the results of the first query with the original stream to find the event that match the last time stamps in each window.

DateDiff jest funkcją specyficzną dla daty, która porównuje i zwraca różnicę czasu między dwoma polami DateTime, aby uzyskać więcej informacji, zapoznaj się z funkcjami daty.DATEDIFF is a date-specific function that compares and returns the time difference between two DateTime fields, for more information, refer to date functions.

Aby uzyskać więcej informacji na temat sprzęgania strumieni, zapoznaj się z tematem Join.For more information on joining streams, refer to JOIN.

Skorelowanie zdarzeń w strumieniuCorrelate events in a stream

Zdarzenia skorelowane w tym samym strumieniu mogą być wykonywane przez przeglądanie przeszłych zdarzeń przy użyciu funkcji lag .Correlating events in the same stream can be done by looking at past events using the LAG function. Na przykład dane wyjściowe można generować za każdym razem, gdy dwa kolejne samochody z tego samego przechodzą przez połączenie płatne przez ostatnie 90 sekund.For example, an output can be generated every time two consecutive cars from the same Make go through the toll for the last 90 seconds.

Dane wejściowe:Input:

TworzenieMake License_plateLicense_plate CzasTime
Make1Make1 ABC-123ABC-123 2015-01-01T00:00:01.0000000 Z2015-01-01T00:00:01.0000000Z
Make1Make1 AAA-999AAA-999 2015-01-01T00:00:02.0000000 Z2015-01-01T00:00:02.0000000Z
Make2Make2 DEF-987DEF-987 2015-01-01T00:00:03.0000000 Z2015-01-01T00:00:03.0000000Z
Make1Make1 GHI-345GHI-345 2015-01-01T00:00:04.0000000 Z2015-01-01T00:00:04.0000000Z

Dane wyjściowe:Output:

TworzenieMake CzasTime Current_car_license_plateCurrent_car_license_plate First_car_license_plateFirst_car_license_plate First_car_timeFirst_car_time
Make1Make1 2015-01-01T00:00:02.0000000 Z2015-01-01T00:00:02.0000000Z AAA-999AAA-999 ABC-123ABC-123 2015-01-01T00:00:01.0000000 Z2015-01-01T00:00:01.0000000Z

Zapytanie:Query:

SELECT
    Make,
    Time,
    License_plate AS Current_car_license_plate,
    LAG(License_plate, 1) OVER (LIMIT DURATION(second, 90)) AS First_car_license_plate,
    LAG(Time, 1) OVER (LIMIT DURATION(second, 90)) AS First_car_time
FROM
    Input TIMESTAMP BY Time
WHERE
    LAG(Make, 1) OVER (LIMIT DURATION(second, 90)) = Make

Funkcja lag może odszukać strumień wejściowy po jednym zdarzeniu i pobrać wartość Make , porównując ją z wartością Make bieżącego zdarzenia.The LAG function can look into the input stream one event back and retrieve the Make value, comparing that with the Make value of the current event. Po spełnieniu warunku dane z poprzedniego zdarzenia mogą być rzutowane przy użyciu opóźnienia w instrukcji SELECT .Once the condition is met, data from the previous event can be projected using LAG in the SELECT statement.

Aby uzyskać więcej informacji, zapoznaj się z opóźnieniem.For more information, refer to LAG.

Wykrywanie czasu trwania między zdarzeniamiDetect the duration between events

Czas trwania zdarzenia może być obliczany przez wyszukanie ostatniego zdarzenia uruchomienia po odebraniu zdarzenia końcowego.The duration of an event can be computed by looking at the last Start event once an End event is received. To zapytanie może być przydatne do określenia czasu poświęcanego użytkownikowi na stronę lub funkcję.This query can be useful to determine the time a user spends on a page or a feature.

Dane wejściowe:Input:

UżytkownikUser FunkcjaFeature WydarzenieEvent CzasTime
user@location.com RightMenuRightMenu RozpocznijStart 2015-01-01T00:00:01.0000000 Z2015-01-01T00:00:01.0000000Z
user@location.com RightMenuRightMenu KoniecEnd 2015-01-01T00:00:08.0000000 Z2015-01-01T00:00:08.0000000Z

Dane wyjściowe:Output:

UżytkownikUser FunkcjaFeature Czas trwaniaDuration
user@location.com RightMenuRightMenu 77

Zapytanie:Query:

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'

Ostatnia funkcja może służyć do pobierania ostatniego zdarzenia w określonym warunku.The LAST function can be used to retrieve the last event within a specific condition. W tym przykładzie warunek to zdarzenie typu Start, partycjonowanie wyszukiwania według partycji przez użytkownika i funkcję.In this example, the condition is an event of type Start, partitioning the search by PARTITION BY user and feature. W ten sposób każdy użytkownik i funkcja jest traktowana niezależnie podczas wyszukiwania zdarzenia uruchomienia.This way, every user and feature is treated independently when searching for the Start event. Limit czasu trwania umożliwia przeszukiwanie z powrotem do 1 godziny między zdarzeniami końcowymi i początkowymi.LIMIT DURATION limits the search back in time to 1 hour between the End and Start events.

Wykrywanie czasu trwania warunkuDetect the duration of a condition

W przypadku warunków obejmujących wiele zdarzeń funkcja lag może służyć do identyfikowania czasu trwania tego warunku.For conditions that span through multiple events the LAG function can be used to identify the duration of that condition. Załóżmy na przykład, że usterka spowodowała, że wszystkie samochody mają niepoprawną wagę (powyżej 20 000 funtów), a czas trwania tego błędu musi być obliczany.For example, suppose that a bug resulted in all cars having an incorrect weight (above 20,000 pounds), and the duration of that bug must be computed.

Dane wejściowe:Input:

TworzenieMake CzasTime WagaWeight
Make1Make1 2015-01-01T00:00:01.0000000 Z2015-01-01T00:00:01.0000000Z 20002000
Make2Make2 2015-01-01T00:00:02.0000000 Z2015-01-01T00:00:02.0000000Z 2500025000
Make1Make1 2015-01-01T00:00:03.0000000 Z2015-01-01T00:00:03.0000000Z 2600026000
Make2Make2 2015-01-01T00:00:04.0000000 Z2015-01-01T00:00:04.0000000Z 2500025000
Make1Make1 2015-01-01T00:00:05.0000000 Z2015-01-01T00:00:05.0000000Z 2600026000
Make2Make2 2015-01-01T00:00:06.0000000 Z2015-01-01T00:00:06.0000000Z 2500025000
Make1Make1 2015-01-01T00:00:07.0000000 Z2015-01-01T00:00:07.0000000Z 2600026000
Make2Make2 2015-01-01T00:00:08.0000000 Z2015-01-01T00:00:08.0000000Z 20002000

Dane wyjściowe:Output:

Start_faultStart_fault End_faultEnd_fault
2015-01-01T00:00:02.000 Z2015-01-01T00:00:02.000Z 2015-01-01T00:00:07.000 Z2015-01-01T00:00:07.000Z

Zapytanie:Query:

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

SELECT 
    LAG(time) OVER (LIMIT DURATION(hour, 24) WHEN previous_weight < 20000 ) [Start_fault],
    previous_time [End_fault]
FROM SelectPreviousEvent
WHERE
    [weight] < 20000
    AND previous_weight > 20000

Pierwsza instrukcja SELECT korelacji bieżącym pomiarem wagi z poprzednią pomiarem, projekcję razem z bieżącą pomiar.The first SELECT statement correlates the current weight measurement with the previous measurement, projecting it together with the current measurement. Druga opcja powoduje powracanie do ostatniego zdarzenia, gdzie previous_weight jest mniejsza niż 20000, gdzie bieżąca waga jest mniejsza niż 20000, a previous_weight bieżącego zdarzenia był większy niż 20000.The second SELECT looks back to the last event where the previous_weight is less than 20000, where the current weight is smaller than 20000 and the previous_weight of the current event was bigger than 20000.

End_fault to bieżące niewadliwe zdarzenie, w przypadku którego poprzednie zdarzenie było nieuszkodzone, a Start_fault to ostatnie niewadliwe zdarzenie.The End_fault is the current non-faulty event where the previous event was faulty, and the Start_fault is the last non-faulty event before that.

Okresowe wartości wyjściowePeriodically output values

W przypadku nietypowych lub brakujących zdarzeń dane wyjściowe w regularnych odstępach czasu mogą być generowane na podstawie bardziej rozrzedzonych danych wejściowych.In case of irregular or missing events, a regular interval output can be generated from a more sparse data input. Na przykład Wygeneruj zdarzenie co 5 sekund, które raportuje ostatnio widziany punkt danych.For example, generate an event every 5 seconds that reports the most recently seen data point.

Dane wejściowe:Input:

CzasTime WartośćValue
"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

Dane wyjściowe (pierwsze 10 wierszy) :Output (first 10 rows):

Window_endWindow_end Last_event. PierwszymLast_event.Time Last_event. WartościamiLast_event.Value
2014-01-01T14:01:00.000 Z2014-01-01T14:01:00.000Z 2014-01-01T14:01:00.000 Z2014-01-01T14:01:00.000Z 11
2014-01-01T14:01:05.000 Z2014-01-01T14:01:05.000Z 2014-01-01T14:01:05.000 Z2014-01-01T14:01:05.000Z 22
2014-01-01T14:01:10.000 Z2014-01-01T14:01:10.000Z 2014-01-01T14:01:10.000 Z2014-01-01T14:01:10.000Z 33
2014-01-01T14:01:15.000 Z2014-01-01T14:01:15.000Z 2014-01-01T14:01:15.000 Z2014-01-01T14:01:15.000Z 44
2014-01-01T14:01:20.000 Z2014-01-01T14:01:20.000Z 2014-01-01T14:01:15.000 Z2014-01-01T14:01:15.000Z 44
2014-01-01T14:01:25.000 Z2014-01-01T14:01:25.000Z 2014-01-01T14:01:15.000 Z2014-01-01T14:01:15.000Z 44
2014-01-01T14:01:30.000 Z2014-01-01T14:01:30.000Z 2014-01-01T14:01:30.000 Z2014-01-01T14:01:30.000Z 55
2014-01-01T14:01:35.000 Z2014-01-01T14:01:35.000Z 2014-01-01T14:01:35.000 Z2014-01-01T14:01:35.000Z 66
2014-01-01T14:01:40.000 Z2014-01-01T14:01:40.000Z 2014-01-01T14:01:35.000 Z2014-01-01T14:01:35.000Z 66
2014-01-01T14:01:45.000 Z2014-01-01T14:01:45.000Z 2014-01-01T14:01:35.000 Z2014-01-01T14:01:35.000Z 66

Zapytanie:Query:

SELECT
    System.Timestamp() AS Window_end,
    TopOne() OVER (ORDER BY Time DESC) AS Last_event
FROM
    Input TIMESTAMP BY Time
GROUP BY
    HOPPINGWINDOW(second, 300, 5)

To zapytanie generuje zdarzenia co 5 sekund i wyświetla ostatnie zdarzenie, które zostało odebrane wcześniej.This query generates events every 5 seconds and outputs the last event that was received previously. Czas trwania HOPPINGWINDOW określa, jak daleko odbędzie się zapytanie, aby znaleźć najnowsze zdarzenie.The HOPPINGWINDOW duration determines how far back the query looks to find the latest event.

Aby uzyskać więcej informacji, zapoznaj się z oknem przeskoku.For more information, refer to Hopping window.

Przetwarzaj zdarzenia o niezależnym czasie (w podstrumieniach)Process events with independent time (Substreams)

Zdarzenia mogą być opóźnione lub nieaktualne z powodu pochylenia zegara między producentami zdarzeń, nachylenia zegara między partycjami lub opóźnienia sieci.Events can arrive late or out of order due to clock skews between event producers, clock skews between partitions, or network latency. Na przykład zegar urządzenia dla TollID 2 ma pięć sekund w tle TollID 1, a zegar urządzenia dla TollID 3 to dziesięć sekund za TollID 1.For example, the device clock for TollID 2 is five seconds behind TollID 1, and the device clock for TollID 3 is ten seconds behind TollID 1. Obliczenia mogą być wykonywane niezależnie dla każdego naliczania opłat, biorąc pod uwagę tylko własne dane zegara jako sygnaturę czasową.A computation can happen independently for each toll, considering only its own clock data as a timestamp.

Dane wejściowe:Input:

LicensePlateLicensePlate TworzenieMake CzasTime TollIDTollID
DXE 5291DXE 5291 Make1Make1 2015-07-27T00:00:01.0000000 Z2015-07-27T00:00:01.0000000Z 11
YHN 6970YHN 6970 Make2Make2 2015-07-27T00:00:05.0000000 Z2015-07-27T00:00:05.0000000Z 11
QYF 9358QYF 9358 Make1Make1 2015-07-27T00:00:01.0000000 Z2015-07-27T00:00:01.0000000Z 22
GXF 9462GXF 9462 Make3Make3 2015-07-27T00:00:04.0000000 Z2015-07-27T00:00:04.0000000Z 22
VFE 1616VFE 1616 Make2Make2 2015-07-27T00:00:10.0000000 Z2015-07-27T00:00:10.0000000Z 11
RMV 8282RMV 8282 Make1Make1 2015-07-27T00:00:03.0000000 Z2015-07-27T00:00:03.0000000Z 33
MDR 6128MDR 6128 Make3Make3 2015-07-27T00:00:11.0000000 Z2015-07-27T00:00:11.0000000Z 22
YZK 5704YZK 5704 Make4Make4 2015-07-27T00:00:07.0000000 Z2015-07-27T00:00:07.0000000Z 33

Dane wyjściowe:Output:

TollIDTollID LiczbaCount
11 22
22 22
11 11
33 11
22 11
33 11

Zapytanie:Query:

SELECT
      TollId,
      COUNT(*) AS Count
FROM input
      TIMESTAMP BY Time OVER TollId
GROUP BY TUMBLINGWINDOW(second, 5), TollId

Klauzula timestamp over by sprawdza na każdej osi czasu niezależnie od tego, czy są używane podstrumienie.The TIMESTAMP OVER BY clause looks at each device timeline independently using substreams. Zdarzenie wyjściowe dla każdego TollID jest generowane w miarę ich obliczania, co oznacza, że zdarzenia są wykonywane w kolejności w odniesieniu do każdego TollIDu , a nie w kolejności, w jakiej wszystkie urządzenia były w tym samym zegarze.The output event for each TollID is generated as they are computed, meaning that the events are in order with respect to each TollID instead of being reordered as if all devices were on the same clock.

Aby uzyskać więcej informacji, zapoznaj się z sygnaturą czasową.For more information, refer to TIMESTAMP BY OVER.

Usuń zduplikowane zdarzenia w oknieRemove duplicate events in a window

Podczas wykonywania operacji, takich jak Obliczanie średniej wartości dla zdarzeń w danym przedziale czasu, należy filtrować powtarzające się zdarzenia.When performing an operation such as calculating averages over events in a given time window, duplicate events should be filtered. W poniższym przykładzie drugie zdarzenie jest duplikatem pierwszego.In the following example, the second event is a duplicate of the first.

Dane wejściowe:Input:

DeviceIdDeviceId CzasTime AtrybutAttribute WartośćValue
11 2018 R-07-27T00:00:01.0000000 Z2018-07-27T00:00:01.0000000Z TemperaturaTemperature 5050
11 2018 R-07-27T00:00:01.0000000 Z2018-07-27T00:00:01.0000000Z TemperaturaTemperature 5050
22 2018 R-07-27T00:00:01.0000000 Z2018-07-27T00:00:01.0000000Z TemperaturaTemperature 4040
11 2018 R-07-27T00:00:05.0000000 Z2018-07-27T00:00:05.0000000Z TemperaturaTemperature 6060
22 2018 R-07-27T00:00:05.0000000 Z2018-07-27T00:00:05.0000000Z TemperaturaTemperature 5050
11 2018 R-07-27T00:00:10.0000000 Z2018-07-27T00:00:10.0000000Z TemperaturaTemperature 100100

Dane wyjściowe:Output:

AverageValueAverageValue DeviceIdDeviceId
7070 11
4545 22

Zapytanie:Query:

With Temp AS (
SELECT
    COUNT(DISTINCT Time) AS CountTime,
    Value,
    DeviceId
FROM
    Input TIMESTAMP BY Time
GROUP BY
    Value,
    DeviceId,
    SYSTEM.TIMESTAMP()
)

SELECT
    AVG(Value) AS AverageValue, DeviceId
INTO Output
FROM Temp
GROUP BY DeviceId,TumblingWindow(minute, 5)

Licznik (DISTINCT Time) zwraca liczbę unikatowych wartości w kolumnie Time w przedziale czasu.COUNT(DISTINCT Time) returns the number of distinct values in the Time column within a time window. Dane wyjściowe pierwszego kroku można następnie użyć do obliczenia średniej dla każdego urządzenia, przez odrzucenie duplikatów.The output of the first step can then be used to compute the average per device, by discarding duplicates.

Aby uzyskać więcej informacji, zobacz Count (DISTINCT Time).For more information, refer to COUNT(DISTINCT Time).

Okna sesjiSession Windows

Okno sesji to okno, które ciągle rozszerza się po wystąpieniu zdarzeń i jest zamykane w celu obliczenia, jeśli nie otrzymano żadnego zdarzenia po upływie określonego czasu lub gdy okno osiągnie maksymalny czas trwania.A Session Window is a window that keeps expanding as events occur and closes for computation if no event is received after a specific amount of time or if the window reaches its maximum duration. To okno jest szczególnie przydatne podczas obliczania danych interakcji użytkownika.This window is particularly useful when computing user interaction data. Okno jest uruchamiane, gdy użytkownik rozpoczyna pracę z systemem i zamyka się, gdy nie zaobserwowano więcej zdarzeń, co oznacza, że użytkownik zatrzymał działanie.A window starts when a user starts interacting with the system and closes when no more events are observed, meaning, the user has stopped interacting. Na przykład użytkownik korzysta z strony sieci Web, w której zarejestrowano liczbę kliknięć, a okno sesji może służyć do określenia, jak długo użytkownik współdziała z lokacją.For example, a user is interacting with a web page where the number of clicks is logged, a Session Window can be used to find out how long the user interacted with the site.

Dane wejściowe:Input:

User_idUser_id CzasTime Adres URLURL
00 2017 — 01-26T00:00:00.0000000 Z2017-01-26T00:00:00.0000000Z "www.example.com/a.html""www.example.com/a.html"
00 2017 — 01-26T00:00:20.0000000 Z2017-01-26T00:00:20.0000000Z "www.example.com/b.html""www.example.com/b.html"
11 2017 — 01-26T00:00:55.0000000 Z2017-01-26T00:00:55.0000000Z "www.example.com/c.html""www.example.com/c.html"
00 2017 — 01-26T00:01:10.0000000 Z2017-01-26T00:01:10.0000000Z "www.example.com/d.html""www.example.com/d.html"
11 2017 — 01-26T00:01:15.0000000 Z2017-01-26T00:01:15.0000000Z "www.example.com/e.html""www.example.com/e.html"

Dane wyjściowe:Output:

User_idUser_id StartTimeStartTime EndTimeEndTime Duration_in_secondsDuration_in_seconds
00 2017 — 01-26T00:00:00.0000000 Z2017-01-26T00:00:00.0000000Z 2017 — 01-26T00:01:10.0000000 Z2017-01-26T00:01:10.0000000Z 7070
11 2017 — 01-26T00:00:55.0000000 Z2017-01-26T00:00:55.0000000Z 2017 — 01-26T00:01:15.0000000 Z2017-01-26T00:01:15.0000000Z 2020

Zapytanie:Query:

SELECT
    user_id,
    MIN(time) as StartTime,
    MAX(time) as EndTime,
    DATEDIFF(second, MIN(time), MAX(time)) AS duration_in_seconds
FROM input TIMESTAMP BY time
GROUP BY
    user_id,
    SessionWindow(minute, 1, 60) OVER (PARTITION BY user_id)

Wybierz projekty, które są istotne dla interakcji użytkownika, wraz z czasem trwania interakcji.The SELECT projects the data relevant to the user interaction, together with the duration of the interaction. Grupowanie danych według użytkownika i SessionWindow , które są zamykane w przypadku braku interakcji w ciągu 1 minuty, o maksymalnym rozmiarze okna wynoszącym 60 minut.Grouping the data by user and a SessionWindow that closes if no interaction happens within 1 minute, with a maximum window size of 60 minutes.

Aby uzyskać więcej informacji na temat SessionWindow, zobacz okno sesji .For more information on SessionWindow, refer to Session Window .

Rozszerzalność języka z funkcją zdefiniowaną przez użytkownika w języku JavaScript iC#Language extensibility with User Defined Function in JavaScript and C#

Język zapytań Azure Stream Analytics można rozszerzyć za pomocą funkcji niestandardowych, które są zapisywane w C# języku JavaScript lub języka.Azure Stream Analytics query language can be extended with custom functions written either in JavaScript or C# language. Funkcje zdefiniowane przez użytkownika (UDF) to niestandardowe/złożone obliczenia, których nie można łatwo wyrazić przy użyciu języka SQL .User Defined Functions (UDF) are custom/complex computations that cannot be easily expressed using the SQL language. Te UDF można definiować raz i wielokrotnie używać w ramach zapytania.These UDFs can be defined once and used multiple times within a query. Na przykład można użyć funkcji UDF do przekonwertowania szesnastkowej wartości nvarchar (max) na wartość bigint .For example, an UDF can be used to convert a hexadecimal nvarchar(max) value to an bigint value.

Dane wejściowe:Input:

Device_idDevice_id HexValueHexValue
11 B4"B4"
22 11b"11B"
33 "121""121"

Dane wyjściowe:Output:

Device_idDevice_id DecimalDecimal
11 180180
22 283283
33 289289
function hex2Int(hexValue){
    return parseInt(hexValue, 16);
}
public static class MyUdfClass {
    public static long Hex2Int(string hexValue){
        return int.Parse(hexValue, System.Globalization.NumberStyles.HexNumber);
    }
}
SELECT
    Device_id,
    udf.Hex2Int(HexValue) AS Decimal
From
    Input

Funkcja zdefiniowana przez użytkownika będzie obliczać wartość bigint z HexValue przy każdym wykorzystanym zdarzeniu.The User Defined Function will compute the bigint value from the HexValue on every event consumed.

Aby uzyskać więcej informacji, zobacz JavaScript i C#.For more information, refer to JavaScript and C#.

Zaawansowane dopasowywanie do wzorca przy użyciu MATCH_RECOGNIZEAdvanced pattern matching with MATCH_RECOGNIZE

MATCH_RECOGNIZE jest zaawansowanym mechanizmem dopasowywania wzorców, który może służyć do dopasowania sekwencji zdarzeń do dobrze zdefiniowanego wzorca wyrażenia regularnego.MATCH_RECOGNIZE is an advanced pattern matching mechanism that can be used to match a sequence of events to a well-defined regular expression pattern. Na przykład usługa ATM jest monitorowana w czasie rzeczywistym w przypadku awarii w trakcie działania sieci ATM, jeśli istnieją dwa kolejne komunikaty ostrzegawcze, których administrator musi zostać powiadomiony.For example, an ATM is being monitored at real time for failures, during the operation of the ATM if there are two consecutive warning messages the administrator needs to be notified.

Dane wejściowe:Input:

ATM_idATM_id Operation_idOperation_id Return_CodeReturn_Code CzasTime
11 "Wprowadzanie numeru PIN""Entering Pin" Komunikat "success""Success" 2017 — 01-26T00:10:00.0000000 Z2017-01-26T00:10:00.0000000Z
22 "Otwieranie gniazda pieniężnego""Opening Money Slot" Komunikat "success""Success" 2017 — 01-26T00:10:07.0000000 Z2017-01-26T00:10:07.0000000Z
22 "Zamykające gniazdo pieniężne""Closing Money Slot" Komunikat "success""Success" 2017 — 01-26T00:10:11.0000000 Z2017-01-26T00:10:11.0000000Z
11 "Wprowadzanie wycofania ilości""Entering Withdraw Quantity" Komunikat "success""Success" 2017 — 01-26T00:10:08.0000000 Z2017-01-26T00:10:08.0000000Z
11 "Otwieranie gniazda pieniężnego""Opening Money Slot" Wyświetlania"Warning" 2017 — 01-26T00:10:14.0000000 Z2017-01-26T00:10:14.0000000Z
11 "Drukowanie salda banku""Printing Bank Balance" Wyświetlania"Warning" 2017 — 01-26T00:10:19.0000000 Z2017-01-26T00:10:19.0000000Z

Dane wyjściowe:Output:

ATM_idATM_id First_Warning_Operation_idFirst_Warning_Operation_id Warning_TimeWarning_Time
11 "Otwieranie gniazda pieniężnego""Opening Money Slot" 2017 — 01-26T00:10:14.0000000 Z2017-01-26T00:10:14.0000000Z
SELECT *
FROM intput TIMESTAMP BY time OVER ATM_id
MATCH_RECOGNIZE (
    PARTITON BY ATM_id
    LIMIT DURATION(minute, 1)
    MEASURES
        First(Warning.ATM_id) AS ATM_id,
        First(Warning.Operation_Id) AS First_Warning_Operation_id,
        First(Warning.Time) AS Warning_Time
    AFTER MATCH SKIP TO NEXT ROW
    PATTERN (Success* Warning{2,})
    DEFINE
        Success AS Succes.Return_Code = 'Success',
        Failure AS Warning.Return_Code <> 'Success'
) AS patternMatch

To zapytanie dopasowuje co najmniej dwa kolejne zdarzenia błędów i generuje alarm w przypadku spełnienia warunków.This query matches at least two consecutive failure events and generate an alarm when the conditions are met. Wzorzec definiuje wyrażenie regularne, które ma być używane na potrzeby dopasowywania, w tym przypadku dowolną liczbę operacji zakończonych powodzeniem, po których następuje co najmniej dwa kolejne błędy.PATTERN defines the regular expression to be used on the matching, in this case, any number of successful operations followed by at least two consecutive failures. Pomyślne i Niepowodzenie są definiowane przy użyciu wartości Return_Code i po spełnieniu warunku miary są rzutowane z ATM_id, pierwszą operacją ostrzegawczą i pierwszym ostrzeżeniem.Success and Failure are defined using Return_Code value and once the condition is met, the MEASURES are projected with ATM_id, the first warning operation and first warning time.

Aby uzyskać więcej informacji, zobacz MATCH_RECOGNIZE.For more information, refer to MATCH_RECOGNIZE.

Geoogrodzenie i zapytania geograficzneGeofencing and geospatial queries

Azure Stream Analytics udostępnia wbudowane funkcje geoprzestrzenne, które mogą służyć do implementowania scenariuszy takich jak zarządzanie flotą, udostępnianie samochodu, samochody połączone i śledzenie zasobów.Azure Stream Analytics provides built-in geospatial functions that can be used to implement scenarios such as fleet management, ride sharing, connected cars, and asset tracking. Dane geograficzne można pozyskać w formatach GeoJSON lub WKT w ramach strumienia zdarzeń lub danych referencyjnych.Geospatial data can be ingested in either GeoJSON or WKT formats as part of event stream or reference data. Na przykład firma wyspecjalizowana na maszynach produkcyjnych do drukowania paszportów, wydzierżawiania ich maszynom rządowym i konsulatom.For example, a company that is specialized in manufacturing machines for printing passports, lease their machines to governments and consulates. Lokalizacja tych maszyn jest silnie kontrolowana, aby uniknąć nieodpowiedniego umieszczenia i możliwego użycia w celu podrabiania paszportów.The location of those machines is heavily controlled as to avoid the misplacing and possible use for counterfeiting of passports. Każdy komputer jest wyposażony w moduł śledzący GPS, a informacje są przekazywane z powrotem do zadania Azure Stream Analytics.Each machine is fitted with a GPS tracker, that information is relayed back to an Azure Stream Analytics job. Produkcja chce śledzić lokalizację tych maszyn i otrzymywać alerty, jeśli jeden z nich opuszcza autoryzowany obszar, w ten sposób można je zdalnie wyłączyć, urzędy alertów i pobrać sprzęt.The manufacture would like to keep track of the location of those machines and be alerted if one of them leaves an authorized area, this way they can remotely disable, alert authorities and retrieve the equipment.

Dane wejściowe:Input:

Equipment_idEquipment_id Equipment_current_locationEquipment_current_location CzasTime
11 "POINT (-122.13288797982818 47.64082002051315)""POINT(-122.13288797982818 47.64082002051315)" 2017 — 01-26T00:10:00.0000000 Z2017-01-26T00:10:00.0000000Z
11 "POINT (-122.13307252987875 47.64081350934929)""POINT(-122.13307252987875 47.64081350934929)" 2017 — 01-26T00:11:00.0000000 Z2017-01-26T00:11:00.0000000Z
11 "POINT (-122.13308862313283 47.6406508603241)""POINT(-122.13308862313283 47.6406508603241)" 2017 — 01-26T00:12:00.0000000 Z2017-01-26T00:12:00.0000000Z
11 "POINT (-122.13341048821462 47.64043760861279)""POINT(-122.13341048821462 47.64043760861279)" 2017 — 01-26T00:13:00.0000000 Z2017-01-26T00:13:00.0000000Z

Dane wejściowe odwołania:Reference Data Input:

Equipment_idEquipment_id Equipment_lease_locationEquipment_lease_location
11 "WIELOKĄT ((-122.13326028450979 47.6409833866794,-122.13261655434621 47.6409833866794,-122.13261655434621 47.64061471602751,-122.13326028450979 47.64061471602751,-122.13326028450979 47.6409833866794))""POLYGON((-122.13326028450979 47.6409833866794,-122.13261655434621 47.6409833866794,-122.13261655434621 47.64061471602751,-122.13326028450979 47.64061471602751,-122.13326028450979 47.6409833866794))"

Dane wyjściowe:Output:

Equipment_idEquipment_id Equipment_alert_locationEquipment_alert_location CzasTime
11 "POINT (-122.13341048821462 47.64043760861279)""POINT(-122.13341048821462 47.64043760861279)" 2017 — 01-26T00:13:00.0000000 Z2017-01-26T00:13:00.0000000Z
SELECT
    input.Equipment_id AS Equipment_id,
    input.Equipment_current_location AS Equipment_current_location,
    input.Time AS Time
FROM input TIMESTAMP BY time
JOIN
    referenceInput 
    ON input.Equipment_id = referenceInput.Equipment_id
    WHERE 
        ST_WITHIN(input.Equipment_currenct_location, referenceInput.Equipment_lease_location) = 1

Zapytanie umożliwia producentowi automatyczne monitorowanie lokalizacji maszyn, otrzymywanie alertów, gdy maszyna opuszcza dozwolony ogranicznik.The query enables the manufacturer to monitor the machines location automatically, getting alerts when a machine leaves the allowed geofence. Wbudowana funkcja geoprzestrzenna umożliwia użytkownikom używanie danych GPS w ramach zapytania bez bibliotek innych firm.The built-in geospatial function allows users to use GPS data within the query without third-party libraries.

Aby uzyskać więcej informacji, zapoznaj się z scenariuszami geoprzestrzennymi i agregacjami geograficznymi przy użyciu Azure Stream Analytics artykułu.For more information, refer to the Geofencing and geospatial aggregation scenarios with Azure Stream Analytics article.

Uzyskiwanie pomocyGet help

Aby uzyskać dalszą pomoc, Wypróbuj nasz forum usługi Azure Stream Analytics.For further assistance, try our Azure Stream Analytics forum.

Następne krokiNext steps