Share via


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

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

Ayrıca bkz.