Share via


LAG (Azure Stream Analytics)

LAG analiz operatörü, belirli kısıtlamalar dahilinde bir olay akışında "önceki" olayı aramasına olanak tanır. Bir değişkenin büyüme hızının hesaplanması, bir değişkenin eşiği ne zaman aştığı veya bir koşulun doğru olmaya başlaması veya durması durumlarını algılamak için çok yararlıdır.

Stream Analytics'te, LIMIT DURATION yan tümcesi kullanılarak LAG'nin kapsamı (yani geçerli olaydan geçmişe bakılması gereken süre) her zaman sınırlı bir zaman aralığıyla sınırlıdır. LAG isteğe bağlı olarak yalnızca PARTITION BY ve WHEN yan tümcelerini kullanarak belirli bir özellik veya koşuldaki geçerli olayla eşleşen olayları dikkate almakla sınırlı olabilir.

LAG, WHERE yan tümcesindeki koşullardan, JOIN yan tümcesindeki birleştirme koşullarından veya geçerli sorgunun GROUP BY yan tümcesindeki ifadeleri gruplandırmadan etkilenmez çünkü bu yan tümcelerden önce değerlendirilir.

Syntax

LAG(<scalar_expression >, [<offset >], [<default>])  
     OVER ([PARTITION BY <partition key>] LIMIT DURATION(<unit>, <length>) [WHEN boolean_expression])
  

Örneğin:

LAG(reading) OVER (LIMIT DURATION(hour, 3))  
LAG(name, 2, 'none such') OVER (PARTITION BY userId LIMIT DURATION(minute, 2))  

Bağımsız değişkenler

Scalar_expression

Belirtilen uzaklık temelinde döndürülecek değer. Tek bir (skaler) değer döndüren herhangi bir türde bir ifade veya '*' joker ifadesidir. '*' için, belirtilen uzaklık değerine göre olayın tamamı döndürülür ve sonuç olayında (iç içe geçmiş kayıt) yer alır.
scalar_expression diğer analitik işlevleri veya dış işlevleri içeremez.

Uzaklık

Geçerli olaydan bir değer elde etmek için geri alınan olayların sayısı. Belirtilmezse, varsayılan değer 1'dir ve bu da önceki olayı döndürdüğü anlamına gelir. Uzaklık, 1'den büyük veya buna eşit bir tamsayı olmalıdır. Olaylar zamana bağlı olarak işlenir. Aynı zaman damgasına sahip birkaç olay varsa, olaylar varış sırasına göre işlenir.

default

Belirtilen uzaklıkta olay olmadığında döndürülecek değer. Varsayılan değer belirtilmezse NULL döndürülür. 'Belirtilen uzaklıkta hiçbir olay' 1) şu ana kadar görülen karşılık gelen olayların sayısı belirtilen uzaklıktan küçükse veya 2) belirtilen uzaklıktaki olay belirtilen limit_duration_clause 3) olaylara göre zaman aşımına uğradıysa ancak when_clause belirtilen boole koşuluyla eşleşmiyorsa, 'Belirtilen uzaklıkta hiçbir olay' olamaz.

Belirtilen uzaklıkta olay varsa ve scalar_expression değeri NULL ise NULL
hatası döndürülür. varsayılan bir sütun, alt sorgu veya başka bir ifade olabilir, ancak başka bir ifade içeremez
analiz işlevleri veya dış işlevler. varsayılan, ile tam olarak aynı türe sahip olmalıdır
Scalar_expression.

OVER ( [ partition_by_clause ] limit_duration_clause [when_clause])

partition_by_clause PARTITION BY <bölüm anahtarı> yan tümcesi yalnızca değeri olan olayların
<bölüm anahtarı> , geçerli olayın dikkate alınmasıyla aynıdır. Örneğin,

LAG(reading) OVER (PARTITION BY sensorId LIMIT DURATION(hour, 1))  

geçerli olayla aynı algılayıcının önceki okumasını döndürür (bu durumda önceki 1 saat içinde gerçekleştiyse).

limit_duration yan tümcesi SÜRE(<birim>, <uzunluk>)

Geçerli olaydaki geçmişin ne kadarının dikkate alınması gerektiğini belirtir. Desteklenen birimlerin ve kısaltmalarının ayrıntılı açıklaması için bkz. DATEDIFF. SÜRE aralığında yeterli eşleşen olay bulunmazsa, <varsayılan> değer döndürülür.

when_clause
OLAYLARıN LAG hesaplamasında dikkate alınması için boole koşulunu belirtir. SÜRE aralığında yeterli eşleşen olay bulunmazsa, <varsayılan> değer döndürülür. when_clause isteğe bağlıdır.

Dönüş Türleri

Belirtilen scalar_expression veri türü. scalar_expression null döndürülür

Genel Açıklamalar

LAG, belirleyici değildir. Olaylar zamana bağlı olarak işlenir. Aynı zaman damgasına sahip birkaç olay varsa, olaylar varış sırasına göre işlenir.

Bir pencereleme işlevinin sonuç kümesine LAG uygulamak beklenmeyen sonuçlara neden olabilir. Pencereleme işlevleri olayların zaman damgasını değiştirir, her pencere işlemi pencerenin sonunda olay çıkışı sağlar. Bir olayın geçerli zaman damgasına system.timestamp() ile erişilebilir, bir pencere işleminden sonra özgün olay zamanı özniteliğinden farklılık gösterir. LAG, pencere işleminden önce taşınamıyorsa CollectTop kullanarak özgün olay zamanına göre sıralamayı göz önünde bulundurun.

Örnekler

Sensör başına büyüme hızını hesapla:

SELECT sensorId,  
       growth = reading -
                        LAG(reading) OVER (PARTITION BY sensorId LIMIT DURATION(hour, 1))  
FROM input  
  

Önceki null olmayan algılayıcı okumalarını bulun:

SELECT  
     sensorId,  
     LAG(reading) OVER (PARTITION BY sensorId LIMIT DURATION(hour, 1) WHEN reading IS NOT NULL)  
     FROM input  
  

Belirli bir algılayıcı türü için önceki null olmayan algılayıcı okumasını bulun:

WITH filterSensor AS
(
  SELECT *
  FROM input
  WHERE input.sensorType = 4 AND sensorId IS NOT NULL
)

SELECT
  LAG(reading) OVER (PARTITION BY sensorId LIMIT DURATION(hour, 1))
FROM filterSensor

Bir değişkenin eşiği ne zaman aştığı belirlenir:

SELECT
    sensorId, reading
FROM input
WHERE
    devicetype = 'thermostat'
    AND reading > 100
    AND LAG(reading) OVER (PARTITION BY sensorId LIMIT DURATION(hour, 1) WHEN devicetype = 'thermostat') <= 100

Ayrıca Bkz.

ISFIRST (Azure Stream Analytics)
LAST (Azure Stream Analytics)