LAST (Azure Stream Analytics)

LAST 分析演算子を使用すると、定義された制約内のイベント ストリームで最新のイベントを検索できます。 これは、最後の既知の良好な値 (null ではないなど) の計算、イベントが特定の条件に一致した最後の時刻の検索などのシナリオで役立ちます。

Stream Analytics では、 LIMIT DURATION 句を使用して、LAST のスコープ (つまり、現在のイベントから履歴に戻る距離) は、常に有限の時間間隔に制限されます。 LAST は、必要に応じて、PARTITION BY 句と WHEN 句を使用して、特定のプロパティまたは条件の現在のイベントに一致するイベントのみを考慮するように制限できます。 LAST は、WHERE 句の述語、JOIN 句の結合条件、または現在のクエリの GROUP BY 句のグループ化式の影響を受けません。

発言: LAST(<expression>, <default>) は LAG(<expression>, 0, <default>) に相当します (オフセット値は '0' に設定されます)。 LAG(<expression>, 0, <default>) は実際には有効なコンストラクトではないことに注意してください。LAG は 1 以上のオフセットを受け取ります。 そのため、便利で読みやすくするために導入された LAST 演算子を代わりに使用する必要があります。

構文

LAST(<scalar_expression >, [<default>])    
       OVER ( [PARTITION BY <partition key>] LIMIT DURATION(<unit>, <length>) [WHEN boolean_expression])  
  

引数

scalar_expression

返される値。 単一 (スカラー) 値を返す何らかの種類の式とワイルドカード式「*」のいずれかになります。 '*' の場合、イベント全体が返され、結果イベント (入れ子になったレコード) に含まれます。 scalar_expression に他の分析関数または外部関数を含めることはできません。

default

イベント一致条件がない場合に返す値。 既定値を指定しない場合、NULL が返されます。 'No event' は、limit_duration_clauseで指定された時間間隔内に前のイベントがない場合、またはイベントが存在するが、when_clauseで指定された条件と一致しない場合に当てはまります。 イベントが存在し、scalar_expressionの値が NULL の場合は NULL が返されます。 default には列、サブクエリ、またはその他の式を指定できますが、他の分析関数や外部関数を含めることはできません。 default には、scalar_expressionとまったく同じ型が必要です。

OVER ( [ partition_by_clause ] limit_duration_clause [when_clause])

partition_by_clause PARTITION BY <パーティション キー> 句は、 の値が のイベントのみを要求します
<パーティション キー> は、現在のイベントが考慮されるのと同じです。

limit_duration_clause DURATION(<unit>, <length>):
現在のイベントの履歴を考慮する必要がある量を指定します。 サポートされている単位とその省略形について詳しくは、DATEDIFF をご覧ください。 DURATION 間隔内に十分な一致イベントが見つからない場合は、 <既定値> が返されます。

when_clause LAST 計算で考慮されるイベントのブール条件を指定します。 DURATION 間隔内に一致するイベントが見つからない場合は、 <既定値> が返されます。 when_clauseは省略可能です。

戻り値の型

指定した scalar_expression のデータ型。 scalar_expression の場合、NULL が返されます。

全般的な解説

LAST は非決定的です。 イベントは、時間的な順序で処理されます。 同じタイム スタンプのイベントが複数ある場合、イベントは到着順に処理されます。

ウィンドウ関数の結果セットに LAST を適用すると、予期しない結果が生成される可能性があります。 ウィンドウ操作では、ウィンドウの最後にイベントが出力されるように、ウィンドウ関数によってイベントのタイムスタンプが変更されます。 イベントの現在のタイムスタンプには system.timestamp()を使用してアクセスできます。ウィンドウ操作後は、元のイベント時刻属性とは異なります。 ウィンドウ操作の前に LAST を移動できない場合は、 CollectTop の使用を検討し、元のイベント時刻で並べ替えます。

最新の null 以外のセンサー読み取りを検索します。

SELECT  
       sensorId,   
       LAST(reading) OVER (PARTITION BY sensorId LIMIT DURATION(hour, 1) WHEN reading IS NOT NULL)  
FROM input   

読み取りが 50 を超えたときの最後の時刻を検索します。

SELECT
       sensorId,
       LAST(System.Timestamp()) OVER (PARTITION BY sensorId LIMIT DURATION(hour, 1) WHEN reading > 50 )
FROM input 

参照

ISFIRST (Azure Stream Analytics)
LAG (Azure Stream Analytics)