MATCH_RECOGNIZE (Stream Analytics)
MATCH_RECOGNIZE yan tümcesi, veri akışı üzerinden bir dizi olayı aramak için kullanılır. Bu yan tümce, eşleşmedeki değerleri doğrulamak ve ayıklamak için normal ifadeleri ve toplama yöntemlerini kullanarak olay desenleri tanımlamanızı sağlar.
Aşağıdaki örnekte MATCH_RECOGNIZE yan tümcesinin temel yapısı gösterilmektedir:
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 varsayılan olarak EŞLEŞME BAŞINA Bİr SATIR eşleşen bir çıkışa sahiptir ve bu, kullanılabilen tek eşleşmedir. Bu, eşleşmenin eşleşme başına tek bir satır sonucu ürettiği ve eşleşen satırları döndürmediği anlamına gelir.
Syntax
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> ::=
{
* | + | ?
}
SÜREYİ SINIRLA
Sınır süresi, desenin aranacağı zaman aralığını tanımlamak için kullanılır. Olaylar zamana göre sıralanır ve zaman alanını belirtmek için SELECT yan tümcesinde TIMESTAMP BY kullanılabilir.
BÖLÜMLE
PARTITION BY, eşleşmenin bir sütun adı üzerinden anahtarlanıp bölümlendirilmesine olanak tanır. Bölüm deyimi tarafından belirtilen her benzersiz anahtar üzerinde bir eşleşme gerçekleşir. Bu, tek bir sorgunun tüm anahtarlar üzerinde eşleşmesini ve her anahtara bir tane olmak üzere ayrı eşleşmeler oluşturmasını sağlar.
EŞLEŞTIRMEDEN SONRA SONRAKI SATıRA ATLA
Bu skip yan tümcesi, S olayından başlayarak bir desen eşleştirildikten sonra bir sonraki eşleştirme denemesinin S+1 olayında başlayacağını tanımlar. Bu durumda eşleşmeler çakışabilir, bir desen içinde başka bir desenin başlangıcını içerebilir. Bu, kullanılabilen tek skip yan tümcesidir.
ÖNLEM -LER
ÖLÇÜLER, toplama yöntemleri kullanılarak eşleşmeden yansıtılan değerleri tanımlamak için kullanılır. Örneğin, LAST(A.id) AS aid
adlı desenle A
eşleşen tüm olaylar üzerinde bulunan son id
değeri alan adına aid
verir.
Sınıflandırıcı işlevi
Sınıflandırıcı işlevi, giriş olaylarıyla eşleşen desen adlarını çıkarmak için ÖLÇÜLER'de kullanılabilir. işlevi, her biri bir olayla eşleşen desen adına sahip dizelerin listesini döndürür.
DESEN
Desen, veri akışı üzerinde aranacak olayların normal ifadesini tanımlar. Desen değişkenleri kullanıcı tanımlı ve boşluklarla ayrılmıştır. ve * gibi + değiştiriciler, olayları eşleştirirken bir değişkenin sıklığını değiştirmek için kullanılabilir.
Örnek
PATTERN (A+ (B | C))
Bu örnekteki desen en az bir kez A değişkenini ve ardından B veya C'nin birleştirilmesini tanımlar.
Desen Niceleyicileri
Desen niceleyicileri, bir desenin geçerli olması için kaç kez eşleşmesi gerektiğini tanımlayarak veri akışında eşlenme şeklini değiştirmek için kullanılır. Aşağıdaki niceleyiciler kullanılabilir:
- '*' - Sıfır veya daha fazla kez
- '+' - Bir veya daha fazla kez
- '?' – Sıfır veya bir kez
- '|' - Bir desen veya başka bir desen
Örnek:
PATTERN (A? B+)
Bu örnek , A 0 veya 1 zamanı ve ardından en az bir kez B'i tanımlar.
DEFINE
DEFINE, bir desen değişkenini bir olayla eşleştirmek için kullanılan kuralları belirtir. Kurallar, veri akışından toplanan değerler üzerinde Boole ifadeleridir.
DEFINE
A AS Last(A.bigint) > 5,
B AS Last(A.bigint) < B.bigint
Bu örnek, A'nınLAST değerinin 5'ten büyük olduğu veB'nin LAST değerinin B'nin geçerli değerinden küçük olduğu A ve B kurallarını tanımlar. DEFINE ifadesinde toplama işlevi kullanmadığınızda, değerlendirilen geçerli olay desen değişkenine bağlanır, örneğin, B.bigint'teB değeri değerlendirilen geçerli olaydan gelir.
Tanımlı desenlere yalnızca sırasıyla erişilebilir; A deseni B deseni öncesinde tanımlanmışsa, AB'ye başvuramaz.
İzin verildi
...
DEFINE
A AS Last(A.value),
B AS Max(A.value) + Max(B.value),
...
İzin verilmiyor
...
DEFINE
A AS Last(A.value) + Last(B.Value),
B AS Max(A.value) + Max(B.value),
...
Toplama Yöntemleri
ÖLÇÜLER ve DEFINE'de aşağıdaki toplama yöntemleri kullanılabilir:
- Min : Şimdiye kadar toplanan minimum sayıdır.
- Max: Şu ana kadar toplanan maksimum sayı.
- First : Toplanan ilk değer.
- Last : Şimdiye kadar toplanan son değer.
Örnek:
Yüksek basınçlı tankların doldurulması tehlikeli bir işlemdir ve bir tank üzerindeki basıncın artması sıcaklığı da artırdığı için yakından izlenmesi gerekir, tankın doldurma sırasında soğuması için zaman tanımak için basıncın sürekli olarak artması gerekir.
Bu örnekte geliştirici, basıncı artırmaya başladığı için yüksek basınçlı bir tankın yeniden doldurulmasını izlemek istiyor. Tank yeniden doldurmaya başlar ve basıncı 3 dakikadan kısa bir süre içinde iki katına çıkaramaz, aksi takdirde tank aşırı ısınır ve yıkıcı bir arızaya neden olabilir.
İlerleme durumunu izlemek için aşağıdaki sorgu kullanılabilir:
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
Bu sorgu , Normal'i tankı dolduran herhangi bir olayla eşleştirir ve basıncın 3 dakika içinde Normal doldurmanın iki katının üzerinde olması durumunda, Tehlikeli desen için maksimum basınç okumasıyla bir olayın tetiklenmesinden daha fazladır.
Sınırlamalar
Toplamalar için yalnızca alan değerleri kullanılabilir. Toplama çağrısı içinde hiçbir işlev çağrılanamamalıdır.
İzin verildi
... DEFINE A AS Max(A.value) > 5, ...
İzin verilmiyor
... DEFINE A AS Max(udf.myUdf(A.value)) > 5, ...
Toplama işlevine giriş parametresi olarak yalnızca tek bir alan sağlanabilir.
İzin verildi
... DEFINE A AS Max(A.value) > 5, ...
İzin verilmiyor
... DEFINE A AS Max(A.value1 + A.value2) > 5, ...