LAST_VALUE mengembalikan nilai non-null terakhir dalam suatu aliran data di dalam jendela OVER. Fungsi ini digunakan untuk melacak nilai valid terbaru untuk setiap partisi saat catatan baru tiba.
Batasan
Hanya didukung di Realtime Compute for Apache Flink yang menggunakan Ververica Runtime (VVR) 3.0.0 atau versi lebih baru.
Sintaksis
T LAST_VALUE(T value)
T LAST_VALUE(T value, BIGINT order)Parameter input
| Parameter | Tipe data | Deskripsi |
|---|---|---|
value | Semua tipe data | Nilai yang akan dievaluasi. Nilai null dilewati. |
order | BIGINT | Kunci peringkat yang menentukan catatan mana yang dianggap terakhir. Catatan non-null dengan nilai order terbesar dikembalikan. |
Semua parameter input harus memiliki tipe data yang sama.
Nilai kembalian
Mengembalikan tipe data yang sama dengan value.
Catatan penggunaan
Menggunakan parameter order
Ketika Anda memberikan nilai order, LAST_VALUE memilih catatan non-null dengan nilai order terbesar, bukan berdasarkan urutan pemrosesan.
Contoh
Data uji (tabel 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 |
Pernyataan uji
SELECT c, LAST_VALUE(b)
OVER (PARTITION BY c ORDER BY PROCTIME() RANGE UNBOUNDED PRECEDING) AS var1
FROM T1;Hasil
| 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 |
Baris NULL pada kolom c mengembalikan var1 = 7 karena partisi tersebut hanya berisi satu baris (b = 7). Untuk partisi Hello World, setiap baris mencerminkan nilai b non-null terakhir hingga dan termasuk baris tersebut (7, lalu 8, lalu 20), karena kerangka jendela menggunakan RANGE UNBOUNDED PRECEDING.