LAST_VALUE işlevi, OVER penceresi içindeki bir veri akışındaki son boş olmayan (non-null) değeri döndürür. Yeni kayıtlar geldikçe her bölüm için en güncel geçerli değeri izlemek amacıyla bu işlevi kullanın.
Sınırlamalar
Bu işlev yalnızca Ververica Runtime (VVR) 3.0.0 veya sonraki sürümlerini kullanan Realtime Compute for Apache Flink ortamlarında desteklenir.
Söz dizimi
T LAST_VALUE(T value)
T LAST_VALUE(T value, BIGINT order)
Giriş parametreleri
| Parametre | Veri türü | Açıklama |
|---|---|---|
value |
Herhangi bir veri türü | Değerlendirilecek değer. Boş (null) değerler atlanır. |
order |
BIGINT | Hangi kaydın son olarak kabul edileceğini belirleyen sıralama anahtarı. En büyük order değerine sahip boş olmayan kayıt döndürülür. |
Tüm giriş parametreleri aynı veri türünde olmalıdır.
Dönüş değeri
value parametresiyle aynı veri türünü döndürür.
Kullanım notları
**order parametresinin kullanımı**
Bir order değeri sağladığınızda, LAST_VALUE işlevi işlem sırasına güvenmek yerine en büyük order değerine sahip boş olmayan kaydı seçer.
Örnek
Test verileri (T1 tablosu)
| 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 |
Test ifadesi
SELECT c, LAST_VALUE(b)
OVER (PARTITION BY c ORDER BY PROCTIME() RANGE UNBOUNDED PRECEDING) AS var1
FROM T1;
Sonuç
| 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 sütunundaki NULL satırı, ilgili bölümde yalnızca tek bir satır (b = 7) bulunduğundan var1 = 7 değerini döndürür. Hello World bölümü için ise her satır, o satıra kadar (o satır dahil) olan son boş olmayan b değerini yansıtır (sırasıyla 7, 8 ve 20). Bunun nedeni pencere çerçevesinin RANGE UNBOUNDED PRECEDING olarak ayarlanmış olmasıdır.