LAST_VALUE retorna o último valor não nulo em um fluxo de dados dentro de uma janela OVER. Use essa função para rastrear o valor válido mais recente de cada partição à medida que novos registros chegam.
Limitações
Compatível apenas com o Realtime Compute for Apache Flink que usa o Ververica Runtime (VVR) 3.0.0 ou posterior.
Sintaxe
T LAST_VALUE(T value)
T LAST_VALUE(T value, BIGINT order)
Parâmetros de entrada
| Parâmetro | Tipo de dados | Descrição |
|---|---|---|
value |
Qualquer tipo de dados | O valor a ser avaliado. Valores nulos são ignorados. |
order |
BIGINT | Uma chave de classificação que determina qual registro é considerado o último. O registro não nulo com o maior valor de order é retornado. |
Todos os parâmetros de entrada devem ser do mesmo tipo de dados.
Valor de retorno
Notas de uso
Uso do parâmetro order
Quando você fornece um valor de order, LAST_VALUE seleciona o registro não nulo com o maior valor de order em vez de depender da ordem de processamento.
Exemplo
Dados de teste (tabela 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 |
Instrução de teste
SELECT c, LAST_VALUE(b)
OVER (PARTITION BY c ORDER BY PROCTIME() RANGE UNBOUNDED PRECEDING) AS var1
FROM T1;
Resultado
| 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 |
A linha NULL em c retorna var1 = 7 porque essa partição contém apenas uma linha (b = 7). Para a partição Hello World, cada linha reflete o último valor não nulo de b até aquela linha (7, depois 8 e depois 20), porque o frame da janela é RANGE UNBOUNDED PRECEDING.