最後

✅ Azure Stream Analytics ✅ Fabric Eventstream

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

Stream Analytics では、LAST のスコープ (つまり、検索する必要がある現在のイベントから履歴に戻る距離) は、LIMIT DURATION 句を使用して、常に有限の時間間隔に制限されます。 必要に応じて、PARTITION BY 句と WHEN 句を使用して、特定のプロパティまたは条件の現在のイベントと一致するイベントのみを考慮するように LAST を制限できます。 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

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

デフォルト

イベント一致条件がない場合に返す値。 既定値を指定しない場合、NULL が返されます。 limit_duration_clauseで指定された時間間隔内に以前のイベントがない場合、またはイベントが存在するが、when_clauseで指定された条件と一致しない場合は、'No event' が当てはまる可能性があります。 イベントが存在し、scalar_expressionの値が NULL の場合は NULL が返されます。 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 間隔内に十分な一致イベントが見つからない場合は、 <default> 値が返されます。

when_clause LAST 計算で考慮されるイベントのブール条件を指定します。 DURATION 間隔内に一致するイベントが見つからない場合は、 <default> 値が返されます。 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
遅れ