Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
✅ Поток событий Azure Stream Analytics ✅ Fabric
Предложение MATCH_RECOGNIZE используется для поиска набора событий в потоке данных. Это предложение позволяет определять шаблоны событий с помощью регулярных выражений и агрегатных методов для проверки и извлечения значений из совпадения.
В следующем примере показана базовая структура предложения MATCH_RECOGNIZE:
SELECT *
INTO output FROM input TIMESTAMP BY time
MATCH_RECOGNIZE (
LIMIT DURATION (minute, 1)
PARTITION BY tollBoothId
MEASURES
Last(Toyota.LicensePlate) AS toyotaLicensePlate,
Last(Lexus.LicensePlate) AS lexusLicensePlate
AFTER MATCH SKIP TO NEXT ROW
PATTERN (Toyota+ Ford* Lexus+)
DEFINE
Toyota AS Toyota.make = 'Toyota',
Ford AS Ford.make = 'Ford',
Lexus AS Lexus.make = 'Lexus'
) AS T
MATCH_RECOGNIZE имеет совпадающие выходные данные ONE ROW PER MATCH по умолчанию, что является единственным доступным сопоставлением. Это означает, что совпадение создает один результат строки для каждого совпадения и не возвращает соответствующие строки.
Синтаксис
SELECT_star_query_definition
MATCH_RECOGNIZE (
LIMIT DURATION (time_unit, time)
PARTITION BY column_alias
MEASURES
expression AS column_alias [,...n]
AFTER MATCH SKIP TO NEXT ROW
PATTERN ( <pattern_group> )
DEFINE
pattern_name AS boolean_expression [,…n]
) AS column_alias
<pattern_group> ::=
{
<pattern_name_modifier> [ | <pattern_group> ]*
}
<pattern_name_modifier> ::=
{
<pattern_atom> [ <pattern_atom> ]*
}
<pattern_atom> ::=
{
[ pattern_name | ( <pattern_group> ) ] [ <pattern_modifier> ]?
}
<pattern_name> :: =
{
name | .
}
<pattern_modifier> ::=
{
* | + | ?
}
ОГРАНИЧЕНИЕ ДЛИТЕЛЬНОСТИ
Длительность ограничения используется для определения периода времени для поиска шаблона. События упорядочены по времени и TIMESTAMP BY можно использовать в предложении SELECT для указания поля времени.
РАЗБИВКА ПО
PARTITION BY позволяет ключу и секционировать совпадение по имени столбца. Совпадение будет происходить по каждому уникальному ключу, указанному инструкцией секции. Это позволяет сопоставить один запрос по всем ключам и создать отдельные совпадения, по одному к каждому ключу.
ПОСЛЕ ПЕРЕХОДА К СЛЕДУЮЩЕЙ СТРОКЕ
Это предложение пропуска определяет, что после сопоставления шаблона, начиная с события S, следующая попытка сопоставления будет начинаться с события S+1. Совпадения могут перекрываться в этом случае как шаблон может содержать начало другого шаблона внутри. Это единственное предложение пропуска, доступное.
СИСТЕМА ОДНОРОДНЫХ ПЛАСТОВ
МЕРЫ используются для определения проецируемых значений из сопоставления с помощью агрегатных методов. Например, LAST(A.id) AS aid
будет выводить последнее id
значение, найденное во всех событиях, которые соответствуют шаблону, именованному в A
имя aid
поля.
Функция классификатора
Функцию классификатора можно использовать в МЕРЫ для вывода имен шаблонов, соответствующих входным событиям. Функция возвращает список строк, каждый из которых содержит имя шаблона, соответствующее событию.
РИСУНОК
Шаблон определяет регулярное выражение событий для поиска по потоку данных. Переменные шаблона определяются пользователем и разделяются пробелами. Модификаторы, такие как + и * могут использоваться для изменения частоты переменной при сопоставлении событий.
Пример
PATTERN (A+ (B | C))
Шаблон в этом примере определяет переменную A по крайней мере один раз, за которой следует объединение B или C.
Квантификаторы шаблонов
Квантификаторы шаблонов используются для изменения того, как шаблон сопоставляется в потоке данных, определяя, сколько раз шаблону необходимо соответствовать допустимому. Доступны следующие квантификаторы:
- '*' — ноль или больше раз
- '+' — один или несколько раз
- "?" - Ноль или один раз
- '|' — один шаблон или другой
Пример:
PATTERN (A? B+)
В этом примере определяется значение A0 или 1 раз, за которым следует по крайней мере один раз.
ОПРЕДЕЛЯТЬ
DEFINE задает правила, используемые для сопоставления переменной шаблона с событием. Правила — это логические выражения для агрегированных значений из потока данных.
DEFINE
A AS Last(A.bigint) > 5,
B AS Last(A.bigint) < B.bigint
В этом примере определяются правила A и B , где значение LAST значения A больше 5, и B , где значение LAST A меньше текущего значения B. Если не использовать агрегатную функцию для выражения DEFINE, то текущее событие, которое вычисляется, привязывается к переменной шаблона, например в B.bigint значение B происходит из вычисляемого текущего события.
Определенные шаблоны можно получить только в порядке, если шаблон A определен до шаблона B, A не может ссылаться на B.
разрешенные
...
DEFINE
A AS Last(A.value),
B AS Max(A.value) + Max(B.value),
...
Запрещено
...
DEFINE
A AS Last(A.value) + Last(B.Value),
B AS Max(A.value) + Max(B.value),
...
Агрегатные методы
Следующие агрегатные методы можно использовать в МЕРЫ и ОПРЕДЕЛЕНИЕ:
- Min — минимальное число, агрегированное до сих пор.
- Max — максимальное число, агрегированное до сих пор.
- Сначала — первое значение, агрегированное.
- Последнее — последнее значение, агрегированное до сих пор.
Пример:
Повторное заполнение баков с высоким давлением является опасным процессом и необходимо внимательно следить за тем, как увеличение давления на танке также увеличивает его температуру, давление должно постоянно увеличиваться, чтобы дать время для танка, чтобы охладиться во время перезаполнения.
В этом примере разработчик хочет отслеживать перезаполнение бака с высоким давлением, так как он начинает увеличивать давление. Танк начинает перезаполнение и не может увеличить давление в два раза менее чем за 3 минуты, в противном случае танк перегревается и может вызвать катастрофический сбой.
Для мониторинга хода выполнения можно использовать следующий запрос:
SELECT *
INTO output FROM input TIMESTAMP BY time
MATCH_RECOGNIZE (
LIMIT DURATION (minute, 3)
MEASURES
MAX(Dangerous.pressure) as pressure,
Classifier() as patterns
AFTER MATCH SKIP TO NEXT ROW
PATTERN (Normal+ Dangerous+)
DEFINE
Normal AS Normal.isFilling = 1,
Dangerous AS Max(Dangerous.pressure) > 2* Max(Normal.pressure)
) AS T
Этот запрос соответствует обычному событию, которое заполняет бак, и в случае, если давление превышает двойное заполнение в течение 3 минут, чем событие запускается с максимальным считывание давления для опасного шаблона.
Ограничения
Для агрегатов можно использовать только значения полей. Никакие функции не могут вызываться внутри агрегатного вызова.
разрешенные
... DEFINE A AS Max(A.value) > 5, ...
Запрещено
... DEFINE A AS Max(udf.myUdf(A.value)) > 5, ...
В качестве входного параметра можно предоставить только одно поле в агрегатную функцию.
разрешенные
... DEFINE A AS Max(A.value) > 5, ...
Запрещено
... DEFINE A AS Max(A.value1 + A.value2) > 5, ...