更新时间:2026-07-03 GMT+08:00
分享

first_value

功能描述

first_value函数用于取当前行所对应窗口的第一条数据的值。

使用限制

窗口函数的使用限制如下:

  • 窗口函数只能出现在select语句中。
  • 窗口函数中不能嵌套使用窗口函数和聚合函数。
  • 窗口函数不能和同级别的聚合函数一起使用。

语法格式

first_value([, <ignore_nulls>]) over ([partition_clause] [orderby_clause] [frame_clause])

参数说明

参数

是否必选

说明

expr

待计算返回结果的表达式。

ignore_nulls

BOOLEAN类型,表示是否忽略NULL值。默认值为False。

当参数的值为True时,返回窗口中第一条非NULL的值。

partition_clause

指定分区。分区列的值相同的行被视为在同一个窗口内。

orderby_clause

指定数据在一个窗口内如何排序。

frame_clause

用于确定数据边界。

返回值说明

参数的数据类型。

示例

为便于理解函数的使用方法,本文为您提供源数据,基于源数据提供函数相关示例。创建表logs,并添加数据,命令示例如下:

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

相关文档