Oturum penceresi (Azure Stream Analytics)

Oturum pencereleri, benzer zamanlarda gelen olayları gruplandırır ve veri olmayan zaman aralıklarını filtreler. Oturum penceresi işlevinin üç ana parametresi vardır: zaman aşımı, maksimum süre ve bölümleme anahtarı (isteğe bağlı).

Aşağıdaki diyagramda bir dizi olay içeren bir akış ve bunların 5 dakikalık zaman aşımı ve en fazla 10 dakikalık oturum pencerelerine nasıl eşlendiği gösterilmektedir.

Stream Analytics oturum penceresi

İlk olay gerçekleştiğinde oturum penceresi başlar. Son alınan olayın belirtilen zaman aşımı içinde başka bir olay oluşursa, pencere yeni olayı içerecek şekilde genişletilir. Aksi takdirde, zaman aşımı içinde hiçbir olay gerçekleşmezse, zaman aşımı sırasında pencere kapatılır.

Olaylar belirtilen zaman aşımı içinde gerçekleşmeye devam ederse, oturum penceresi en uzun süreye ulaşılana kadar genişletilebilir. Maksimum süre denetim aralıklarının belirtilen maksimum süreyle aynı boyuta ayarlandığını lütfen unutmayın. Örneğin, maksimum süre 10 ise, pencerenin maksimum süreyi aşıp aşmayacağını denetler, t = 0, 10, 20, 30 vb. Bu, bir oturum penceresinin gerçek süresinin iki kat maxDuration'a kadar olabileceği anlamına gelir.

Bu nedenle matematiksel olarak, aşağıdaki koşul karşılanırsa oturum penceremiz sona erer:

Oturum penceresi bitiş koşulları

Bölüm anahtarı sağlandığında olaylar anahtara göre gruplandırılır ve oturum penceresi her gruba bağımsız olarak uygulanır. Bu, farklı kullanıcılar veya cihazlar için farklı oturum pencerelerine ihtiyaç duyduğunuz durumlar için kullanışlıdır.

Syntax

{SESSIONWINDOW | SESSION} (timeunit, timeoutSize, maxDurationSize) [OVER (PARTITION BY partitionKey)]

{SESSIONWINDOW | SESSION} (Timeout(timeunit , timeoutSize), MaxDuration(timeunit, maxDurationSize)) [OVER (PARTITION BY partitionKey)]

Not

Oturum Penceresi yukarıdaki iki şekilde kullanılabilir.

Bağımsız değişkenler

zaman birimi Pencere boyutu için zaman birimidir. Aşağıdaki tabloda tüm geçerli zaman birimi bağımsız değişkenleri listelemektedir.

Zaman Birimi Kısaltma
gün dd, d
saat hh
dakika mi, n
saniye ss, s
milisaniye Bayan
Microsecond Mcs

zaman aşımı

Oturum penceresinin boşluk boyutunu açıklayan büyük bir tamsayı. Boşluk boyutu içinde oluşan veriler aynı pencerede birlikte gruplandırılır.

maxdurationsize

Toplam pencere boyutu bir denetim noktasında belirtilen maxDurationSize değerini aşarsa, pencere kapatılır ve aynı noktada yeni bir pencere açılır. Şu anda denetim aralığının boyutu maxDurationSize değerine eşittir.

partitionkey

Oturum penceresinin üzerinde çalıştığı anahtarı belirten isteğe bağlı bir parametre. Belirtilirse, pencere yalnızca aynı anahtarın olaylarını birlikte gruplandıracaktır.

Örnekler

Aşağıdaki json verilerine sahip olduğunuzu varsayalım:

[
  // time: the timestamp when the user clicks on the link
  // user_id: the id of the user
  // url: the url the user clicked on
  {
    "time": "2017-01-26T00:00:00.0000000z",
    "user_id": 0,
    "url": "www.example.com/a.html"
  },
  {
    "time": "2017-01-26T00:00:20.0000000z",
    "user_id": 0,
    "url": "www.example.com/b.html"
  },
  {
    "time": "2017-01-26T00:00:55.0000000z",
    "user_id": 1,
    "url": "www.example.com/c.html"
  },
  // ...
]

Her kullanıcı oturumunun ne kadar uzun olduğunu ölçmek için aşağıdaki sorguyu kullanabilirsiniz:

CREATE TABLE localinput(time DATETIME, user_id BIGINT, url NVARCHAR(MAX))
SELECT
    user_id,
    MIN(time) AS window_start,
    System.Timestamp() AS window_end,
    DATEDIFF(s, MIN(time), System.Timestamp()) AS duration_in_seconds
FROM localinput TIMESTAMP BY time
GROUP BY user_id, SessionWindow(minute, 2, 60) OVER (PARTITION BY user_id)

Yukarıdaki sorgu, 2 dakika zaman aşımı, en fazla 60 dakika süre ve user_id bölümleme anahtarı içeren bir oturum penceresi oluşturur. Bu, her user_id için bağımsız oturum pencereleri oluşturulacağı anlamına gelir. Her pencere için, bu sorgu user_id, pencerenin başlangıç saatini (window_start), pencerenin sonunu (window_end) ve kullanıcı oturumunun toplam süresini (duration_in_seconds) içeren bir çıkış oluşturur.