本文为您介绍如何使用实时计算聚合函数FIRST_VALUE。Flink SQL中使用FIRST_VALUE函数返回数据流的第1条非null数据。

语法

T FIRST_VALUE( T value )
T FIRST_VALUE( T value, BIGINT order )

入参

参数 数据类型
value 任意参数类型,但输入参数只能为同一种类型。
order BIGINT

功能描述

获取数据流的第1条非null数据。根据order判定FIRST_VALUE所在的行,取order值最小的记录作为FIRST_VALUE。

示例1

  • 测试数据
    a(BIGINT) b(INT) c(VARCHAR)
    1L 1 “Hello”
    2L 2 “Hello”
    3L 3 “Hello”
    4L 4 “Hello”
    5L 5 “Hello”
    6L 6 “Hello”
    7L 7 “Hello World”
    8L 8 “Hello World”
    20L 20 “Hello World”
  • 测试语句
    SELECT c,
     FIRST_VALUE(b) 
    OVER (
    PARTITION BY c 
    ORDER BY PROCTIME() RANGE UNBOUNDED PRECEDING
    ) AS var1
    FROM T1;
  • 测试结果
    c(VARCHAR) var1(BIGINT)
    “Hello” 1
    “Hello” 1
    “Hello” 1
    “Hello” 1
    “Hello” 1
    “Hello” 1
    “Hello World” 7
    “Hello World” 7
    “Hello World” 7

示例2

  • 测试数据
    a(BIGINT) b(INT) c(VARCHAR) order (BIGINT)
    1L 1 “Hello” 7
    2L 2 “Hello” 7
    3L 3 “Hello” 7
    4L 4 “Hello” 7
    5L 5 “Hello” 6
    6L 6 “Hello” 4
    7L 7 “Hello World” 3
    8L 8 “Hello World” 2
    20L 20 “Hello World” 1
  • 测试语句
    SELECT c,
     FIRST_VALUE(b,order) 
    OVER (
    PARTITION BY c 
    ORDER BY PROCTIME() RANGE UNBOUNDED PRECEDING
    ) AS var1
    FROM T1;
  • 测试结果
    c(VARCHAR) var1(INT)
    “Hello” 1
    “Hello” 1
    “Hello” 1
    “Hello” 1
    “Hello” 5
    “Hello” 6
    “Hello World” 7
    “Hello World” 8
    “Hello World” 20