Anlık görüntü penceresi (Azure Stream Analytics)

Anlık görüntü pencereleri, aynı zaman damgasına sahip olayları gruplar. Belirli bir pencere işlevi gerektiren diğer pencereleme türlerinden farklı olarak ( SessionWindow() gibi), GROUP BY yan tümcesine System.Timestamp() ekleyerek anlık görüntü penceresi uygulayabilirsiniz.

Aşağıdaki diyagramda bir dizi olay içeren bir akış ve bunların anlık görüntü pencerelerine nasıl eşlendiği gösterilmektedir.

Anlık görüntü penceresi diyagramı

System.Timestamp() GROUP BY yan tümcesinde anahtar sütun veya anlık görüntü penceresi tanımı olarak düşünülebilir çünkü olayları zaman damgalarının eşitliğine göre bir pencerede gruplandırmaktadır. System.Timestamp() başka bir pencere işleviyle birleştirildiğinde, pencere tanımı olarak değil anahtar olarak değerlendirilir. System.Timestamp(), GROUP BY yan tümcesinde birden çok pencere işlevi kullanıldığından farklı olarak diğer pencere işlevleriyle kullanıldığında hata oluşturmaz. Sonuçları toplu hale getirmek için hem System.Timestamp() hem de GROUP BY içinde bir pencere işlevi kullanmak yararlı olabilir.

System.Timestamp() içeren ifadeler pencere olarak kabul edilmez. Örneğin, GROUP BY DATEPART(minute, System.Timestamp()) "bir pencere belirtilmelidir" hatasıyla başarısız olur.

Syntax

System.Timestamp()

Örnekler

Temel örnek

Aşağıdaki örnek, tam olarak aynı anda aynı konu türüne sahip tweetlerin sayısını döndürür:

SELECT Topic, COUNT(*)
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, System.Timestamp()

Atlayan pencere anlık görüntüsü örneği

Anlık görüntü pencerelerinde yaygın olarak kullanılanlardan biri, aşağıdaki TumblingWindow gibi önceki bir pencere işlevi aracılığıyla tek bir zaman damgasında gruplandırıldıktan sonra olayları toplamaktır.

Aşağıdaki örnek, 30 dakikalık aralıklarla aynı kullanıcı tarafından aynı konu türüne sahip tweetlerin sayısını döndürür:

WITH PerInterval AS (
    SELECT Topic, User, COUNT(*)
    FROM TwitterStream TIMESTAMP BY CreatedAt
    GROUP BY Topic, User, TumblingWindow(minute, 30)
)
SELECT * INTO UserTopicsCount FROM PerInterval

Aynı aralık içinde konu başına kullanıcı sayısını ve toplam tweet sayısını bulmak için önceki sorgunun sonucunu kullanabilirsiniz. Yuvarlanan pencere sonuçları 30 dakikalık sınıra hizalanmış zaman damgalarına sahip olacağından, hepsinin aynı zaman damgası değerine sahip olması nedeniyle her sınırda olayları döndürmek için bir anlık görüntü penceresi kullanabilirsiniz.

SELECT Topic, Users = COUNT(*), Total = SUM (count)
FROM PerInterval
GROUP BY Topic, System.Timestamp()

Önceki sorgu, aynı 30 dakikalık aralık içinde konu başına kullanıcı sayısını ve toplam tweet sayısını döndürdü. Aynı sonuçları 2 saatte bir almak için GROUP BY yan tümcesine 2 saatlik bir atlayan pencere ekleyin.

Aşağıdaki sorgu, her 2 saatlik pencerenin sonundaki dört 30 dakikalık aralığın sonuçlarını döndürür.

SELECT Topic, Users = COUNT(*), Total = SUM (count)
FROM PerInterval
GROUP BY Topic, System.Timestamp(), Tumbling (hour, 2)

Toplama pencereleri örneği

Toplu Windows() yapısındaki pencerelerden biri olarak System.Timestamp() kullanabilirsiniz.

SELECT 
    TollId, 
    COUNT(*) 
FROM Input TIMESTAMP BY EntryTime 
GROUP BY 
    TollId, 
    Windows(
        TumblingWindow(minute, 10),
        TumblingWindow(minute, 20),
        System.Timestamp())