first_value
first_value函数用于取当前行所对应窗口的第一条数据的值。
使用限制
窗口函数的使用限制如下:
- 窗口函数只能出现在select语句中。
- 窗口函数中不能嵌套使用窗口函数和聚合函数。
- 窗口函数不能和同级别的聚合函数一起使用。
命令格式
first_value(<expr>[, <ignore_nulls>]) over ([partition_clause] [orderby_clause] [frame_clause])
参数说明
参数 |
是否必选 |
说明 |
---|---|---|
expr |
是 |
待计算返回结果的表达式。 |
ignore_nulls |
否 |
BOOLEAN类型,表示是否忽略NULL值。默认值为False。 当参数的值为True时,返回窗口中第一条非NULL的值。 |
partition_clause |
否 |
指定分区。分区列的值相同的行被视为在同一个窗口内。 |
orderby_clause |
否 |
指定数据在一个窗口内如何排序。 |
frame_clause |
否 |
用于确定数据边界。 |
返回值说明
参数的数据类型。
示例代码
示例数据
create table logs( cookieid string, createtime string, url string ) STORED AS parquet;
添加数据如下:
cookie1 2015-04-10 10:00:02 url2 cookie1 2015-04-10 10:00:00 url1 cookie1 2015-04-10 10:03:04 url3 cookie1 2015-04-10 10:50:05 url6 cookie1 2015-04-10 11:00:00 url7 cookie1 2015-04-10 10:10:00 url4 cookie1 2015-04-10 10:50:01 url5 cookie2 2015-04-10 10:00:02 url22 cookie2 2015-04-10 10:00:00 url11 cookie2 2015-04-10 10:03:04 url33 cookie2 2015-04-10 10:50:05 url66 cookie2 2015-04-10 11:00:00 url77 cookie2 2015-04-10 10:10:00 url44 cookie2 2015-04-10 10:50:01 url55
示例:将所有记录根据cookieid分组,并按createtime升序排列,返回每组中的第一行数据。命令示例如下
SELECT cookieid, createtime, url, FIRST_VALUE(url) OVER (PARTITION BY cookieid ORDER BY createtime) AS first FROM logs; 返回结果如下: cookieid createtime url first cookie1 2015-04-10 10:00:00 url1 url1 cookie1 2015-04-10 10:00:02 url2 url1 cookie1 2015-04-10 10:03:04 url3 url1 cookie1 2015-04-10 10:10:00 url4 url1 cookie1 2015-04-10 10:50:01 url5 url1 cookie1 2015-04-10 10:50:05 url6 url1 cookie1 2015-04-10 11:00:00 url7 url1 cookie2 2015-04-10 10:00:00 url11 url11 cookie2 2015-04-10 10:00:02 url22 url11 cookie2 2015-04-10 10:03:04 url33 url11 cookie2 2015-04-10 10:10:00 url44 url11 cookie2 2015-04-10 10:50:01 url55 url11 cookie2 2015-04-10 10:50:05 url66 url11 cookie2 2015-04-10 11:00:00 url77 url11