Windows (Azure Stream Analytics)

ウィンドウ化では、特定のウィンドウ定義に応じて、さまざまな時間間隔でイベントを集計する方法が提供されます。 選択できるテンポラル ウィンドウには、 タンブリングホッピングスライディングセッションの 4 種類があります。

Windows() 関数は、この概念を拡張して、複数の異なるウィンドウ定義の結果を同時に計算します。 Windows() 関数を使用すると、複数のウィンドウ定義を指定できます。 クエリ ロジックは、これらのウィンドウ定義ごとに計算され、結果はすべてのウィンドウ結果の和集合になります。

Windows() 関数の結果には複数のウィンドウの組み合わせが含まれるため、異なる結果を区別する必要があります。 これは、システム関数 System.Window() を使用してアクセスできる各ウィンドウに ID を割り当てることによって行われます。IdSystem.Window() は、ID をフィールドとして持つレコードを返します。

Windows を定義するには、次の 2 つの方法があります。

  • Window() 関数 Window ( ID , window_definition ) を使用して一意の ID を割り当てます。ここで、ID はwindow_definitionの ID であり、Windows コンストラクト内の一意の大文字と小文字を区別しない varchar(max) 値です。

  • ID がない場合は System.Window()。Id は null 値になります。

構文

| Windows ( window_definition, … ) 
| Windows ( Window ( id , window_definition ), … ) 
 
window_definition = 
| HoppingWindow ( … 
| TumblingWindow ( … 
| SlidingWindow ( … 
| SessionWindow ( … 
| Hopping ( … 
| Tumbling ( … 
| Sliding ( … 
| Session ( …  
  

Note

Windows コンストラクトを入れ子にすることはできません。 ID は、すべてのウィンドウ定義に指定するか、または none に指定する必要があります。

"タンブリング" のような短縮されたウィンドウ定義名があります。 Windows() では、 のように Windows(Window('MyWindow', TumblingWindow(…"window" という単語の繰り返しを回避できます。 短縮名は、Windows コンストラクトの外部でも使用できます。

System.Window() を使用してもエラーではありません。 Windows コンストラクトのない ID ですが、ウィンドウに ID が指定されていないため、その値は null になります。

Window() 関数を使用してウィンドウ定義を指定する場合、すべてのウィンドウ定義で Window() 関数を使用する必要があり、大文字と小文字を区別しない ID はすべて一意である必要があります。 Null は使用できません。

System.Window() 関数

System.Window() 関数は、GROUP BY ステートメントの SELECT 句でのみ使用して、グループ化時間枠に関するメタデータを取得できます。

この関数は、イベントが属するウィンドウの ID を保持する単一のフィールド ID を含む Record 型の値を返します。

ウィンドウ ID を使用せずに、期間 10、20、30、40、50、60 分ごとに車をカウントするウィンドウを作成します。

SELECT 
    TollId, 
    COUNT(*) 
FROM Input TIMESTAMP BY EntryTime 
GROUP BY 
    TollId, 
    Windows( 
        TumblingWindow(minute, 10), 
        TumblingWindow(minute, 20), 
        TumblingWindow(minute, 30), 
        TumblingWindow(minute, 40), 
        TumblingWindow(minute, 50), 
        TumblingWindow(minute, 60)) 

1 分ホップと 4 つの異なる期間 (1 分、15 分、30 分、60 分) のウィンドウを作成します。

SELECT 
    System.Window().Id, 
    TollId, 
    COUNT(*) 
FROM Input TIMESTAMP BY EntryTime 
GROUP BY 
    TollId, 
    Windows( 
        Window('1 min', TumblingWindow(minute, 1)), 
        Window('15 min', HoppingWindow(minute, 15, 1)), 
        Window('30 min', HoppingWindow(minute, 30, 1)), 
        Window('60 min', HoppingWindow(minute, 60, 1))) 

異なるサイズのウィンドウを作成し、参照テーブルで指定されたウィンドウ期間に基づいて結果をフィルター処理します。

WITH HoppingWindowResults AS
( 
    SELECT 
        System.Window().Id, 
        TollId, 
        COUNT(*) 
    FROM Input TIMESTAMP BY EntryTime 
    GROUP BY 
        TollId, 
        Windows( 
            Window('H10', Hopping(minute, 10, 5)), 
            Window('H20', Hopping(minute, 20, 5)), 
            Window('H30', Hopping(minute, 30, 5)), 
            Window('H40', Hopping(minute, 40, 5)), 
            Window('H50', Hopping(minute, 50, 5)), 
            Window('H60', Hopping(minute, 60, 5))) 
) 
 
SELECT HoppingWindowResults.* 
FROM HoppingWindowResults 
JOIN ReferenceTable ON  
    HoppingWindowResults.TollId = ReferenceTable.TollId 
    AND HoppingWindowResults.Id = ReferenceTable.windowId  

こちらもご覧ください