Windows (Azure Stream Analytics)

ウィンドウには、特定のウィンドウ定義に応じてさまざまな時間間隔でイベントを集計する方法が用意されています。 タンブリングホッピングスライディングSessionの4種類のテンポラルウィンドウから選択できます。

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

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

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

  • ウィンドウ ()関数、ウィンドウ (id、window_definition)を使用して一意の id を割り当てます。ここで、id はwindow_definitionの id であり、Windows コンストラクト内の一意のvarchar (max)値です。

  • Id なし。この場合は、system.string () です。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(Window('MyWindow', TumblingWindow(… ような単語 "window" の繰り返しを避けるためにWindows ()で使用できます。 短縮名は、Windows コンストラクトの外でも使用できます。

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

Window () 関数を使用してウィンドウ定義を指定する場合は、すべてのウィンドウ定義で window () 関数を使用する必要があり、すべての id は一意である必要があります。 Null は許可されていません。

System.string () 関数

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

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

ウィンドウ 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  

関連項目