Aracılığıyla paylaş


MATCH_RECOGNIZE

✅ Azure Stream Analytics ✅ Fabric Olay Akışı

MATCH_RECOGNIZE yan tümcesi, bir 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 BIR SATIR/EŞLEŞME için eşleşen bir çıkışa sahiptir. 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.

Sözdizimi

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İ SıNıRLA

Sınır süresi, desenin aranacağı zaman penceresini 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.

PARTİSYONA GÖRE

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 deseninin S+1 olayından 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ı A desenle eşleşen tüm olaylar üzerinde bulunan son id değeri alan adına aidverir.

Sınıflandırıcı işlevi

Sınıflandırıcı işlevi, giriş olaylarıyla eşleşen desen adlarının çıktısını almak için ÖLÇÜLER'de kullanılabilir. İşlev, 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ıdır 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 bir desenin 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ını ve ardından en az bir kez B'i tanımlar.

TANIMLAMAK

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 A ve B kurallarını ve A'nınLAST değerinin geçerli B değerinden küçük olduğu B kurallarını tanımlar. DEFINE ifadesinde bir 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 A deseniB deseni öncesinde tanımlanmışsa, AB'ye başvuramaz.

İzin Verilen

...
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ı.
  • Maks: Ş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 yeniden doldurulması tehlikeli bir işlemdir ve bir tank üzerindeki basıncın artması sıcaklığı da artırdığından yakından izlenmesi gerekir, tankın doldurma sırasında soğuması için zaman vermek 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 sürede iki katına çıkaramaz, aksi takdirde tank aşırı ısınmaya neden olur 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ı ile 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ılmaz.

    İzin Verilen

    ...
    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 Verilen

    ...
        DEFINE
      	    A AS Max(A.value) > 5,
      ...    
    

    İzin verilmiyor

      ...
      DEFINE
          A AS Max(A.value1 + A.value2) > 5,
      ...
    

Ayrıca bakınız