LAST_VALUE は、OVER ウィンドウ内のデータストリームで、最後の NULL でない値を返します。新しいレコードが到着するたびに、各パーティションの最新の有効な値を追跡するために使用します。
制限事項
Ververica Runtime (VVR) 3.0.0 以降を使用する Realtime Compute for Apache Flink でのみサポートされています。
構文
T LAST_VALUE(T value)
T LAST_VALUE(T value, BIGINT order)入力パラメーター
| パラメーター | データの型 | 説明 |
|---|---|---|
value | 任意のデータの型 | 評価する値。NULL 値はスキップされます。 |
order | BIGINT | どのレコードを最後と見なすかを決定する順序付けキー。order 値が最大の NULL でないレコードが返されます。 |
重要
すべての入力パラメーターは同じデータの型である必要があります。
戻り値
value と同じデータの型を返します。
注意事項
order パラメーターの使用
order 値を指定すると、LAST_VALUE は処理順序に依存するのではなく、order 値が最大の NULL でないレコードを選択します。
例
テストデータ (テーブル T1)
| a (BIGINT) | b (INT) | c (VARCHAR) |
|---|---|---|
| 1 | 1 | Hello |
| 2 | 2 | Hello |
| 3 | 3 | Hello |
| 4 | 4 | Hello |
| 5 | 5 | Hello |
| 6 | 6 | Hello |
| 7 | 7 | NULL |
| 8 | 7 | Hello World |
| 9 | 8 | Hello World |
| 10 | 20 | Hello World |
テストステートメント
SELECT c, LAST_VALUE(b)
OVER (PARTITION BY c ORDER BY PROCTIME() RANGE UNBOUNDED PRECEDING) AS var1
FROM T1;結果
| c (VARCHAR) | var1 (INT) |
|---|---|
| Hello | 1 |
| Hello | 2 |
| Hello | 3 |
| Hello | 4 |
| Hello | 5 |
| Hello | 6 |
| NULL | 7 |
| Hello World | 7 |
| Hello World | 8 |
| Hello World | 20 |
c 列の NULL 行は、そのパーティションに 1 行 (b = 7) しか含まれていないため、var1 = 7 を返します。Hello World パーティションの場合、ウィンドウフレームが RANGE UNBOUNDED PRECEDING であるため、各行はその行までの最後の NULL でない b 値 (7、次に 8、次に 20) を反映します。