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)
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin