ISFIRST (Azure Stream Analytics)
イベントが特定の固定間隔内の最初のイベントである場合は 1 を返し、それ以外の場合は 0 を返します。 間隔はタンブリング ウィンドウと同じように配置されます (「 タンブリング ウィンドウ」を参照)。 ISFIRST は、WHERE 句の述語、JOIN 句の結合条件、または現在のクエリの GROUP BY 句のグループ化式の影響を受けません。 ).
構文
ISFIRST ( timeunit , duration )
[ OVER ( [PARTITION BY partition_by_expression] [WHEN when_expression]) ]
引数
timeunit
期間の時間単位です。 次の表に、有効なすべての時間単位の値---両方の完全な値を示します。
名前と省略形は、クエリで使用できます。
Timeunit | 省略形 |
---|---|
day | dd、d |
hour | hh |
minute | mi、n |
second | ss、s |
ミリ秒 | ms |
マイクロ秒 | mcs |
duration
間隔内のタイムユニットの数を指定する大きな整数。 たとえば、
ISFIRST(minute, 15) は 15 分間隔で表示されます。 間隔の開始時刻は次のとおりです。
はタンブリング ウィンドウと同じ方法で配置されます ( 「タンブリング ウィンドウ (Azure Stream Analytics)」を参照)。
[ OVER ( partition_by_clause [when_clause]) ]
OVER 句は、このイベントがランク付けされるイベントのサブセットを指定します。
PARTITION BY partition_by_expression 句は、FROM によって生成された結果セットを除算します。
句を、関数が適用されるパーティションに変換します。 つまり、各イベントが比較されます。
の値を共有する他のイベントにのみ partition_by_expression。 指定しない場合、各
イベントは、時間間隔内の他のすべてのイベントに対してランク付けされます。
WHEN when_expression 句は、考慮するイベントのブール条件を指定します。
つまり、各イベントは、満たす他のイベントと比較してランク付けされるだけです
when_expression。 イベント自体が when_expressionを満たさない場合、関数は 0 を返します。
WHEN 句は省略可能です。
戻り値の型
bigint (それぞれ 'true' または 'false' を表す '1' または '0')
全般的な解説
ISFIRST は非決定的です。 イベントは、時間的な順序で処理されます。 同じタイム スタンプのイベントが複数ある場合、イベントは到着順に処理されます。
ウィンドウ関数の結果セットに ISFIRST を適用すると、予期しない結果が生成される可能性があります。 ウィンドウ操作では、ウィンドウの最後にイベントが出力されるように、ウィンドウ関数によってイベントのタイムスタンプが変更されます。 イベントの現在のタイムスタンプには system.timestamp()を使用してアクセスできます。ウィンドウ操作後は、元のイベント時刻属性とは異なります。 ISFIRST をウィンドウ操作の前に移動できない場合は、 CollectTop を使用し、元のイベント時刻で順序を付けて使用することを検討してください。
例
センサー読み取りイベントが 10 分以内の最初のタンブリング間隔であるかどうかを示します。
SELECT
reading,
ISFIRST(mi, 10) as first
FROM Input
イベントが deviceid ごとに 10 分以内の最初のタンブリング間隔であるかどうかを示します。
SELECT
deviceid,
reading,
ISFIRST(mi, 10) OVER (PARTITION BY deviceid) as first
FROM Input
10 分間のタンブリング間隔内で 50 より大きい値を持つ最初のイベントがイベントかどうかを示します
deviceid あたり:
SELECT
deviceid,
reading,
ISFIRST(mi, 10) OVER (PARTITION BY deviceid WHEN reading > 50 AND devicetype = 'thermostat') as firstAbove,
ISFIRST(mi, 10) OVER (PARTITION BY deviceid WHEN reading < 50 AND devicetype = 'thermostat') as firstUnder
FROM Input
WHERE
devicetype = 'thermostat'