ToB企服应用市场:ToB评测及商务社交产业平台

标题: hive的first_value、last_value函数,可取非null值 [打印本页]

作者: 莱莱    时间: 2024-12-1 20:23
标题: hive的first_value、last_value函数,可取非null值
1、原始数据准备

创建hive表、插入数据如下:
  1. CREATE TABLE data (id INT, value INT);
  2. INSERT INTO data (id, value) VALUES
  3.     (1, NULL),
  4.     (2, NULL),
  5.     (3, NULL),
  6.     (4, NULL),
  7.     (5, 99),
  8.     (6, NULL),
  9.     (7, NULL),
  10.     (8, 101),
  11.     (9, NULL),
  12.     (10, NULL);
复制代码
查询数据

2、函数使用

1、函数说明:
first_value:函数用于返回当前第一个值。可开启true下令,跳过null值
last_value:函数用于返回当前最后个值。可开启true下令,跳过null值
  1. select
  2.        id,
  3.        value,
  4.        --1、取第一个值。null也正常取值
  5.        first_value(value) over(order by id),
  6.        --2、第一行到当前行,取第一个非null的值
  7.        first_value(value,true) over(order by id ),
  8.        --3、取当前行,到最后行,第一个非null值。
  9.        --业务需求:取当前行之后的,最近的非null值
  10.        first_value(value,true)
  11.        over(order by id rows between current row and unbounded following)
  12. from data;
复制代码
查询结果:

3、需求

战斗力连续:取近30天的数据,一个账号不是每天都登录,则需要用前后的数据举行填充。
使用窗口函数 LAST_VALUE 和 FIRST_VALUE 分别查找前面和背面近来非NULL值。
需求:某一行数据为null,按今日与登录日期的差值举行升序。本举动null,则往行数高的取,取近来的行数值。如果往高的没有,再往小的行数取,取行数最接近的值、如下面null值,需要填充

  1. SELECT
  2. role_gid,
  3. nd, --值为1、2、3、、、、28
  4.     level_raw,
  5.     battle_level_raw,
  6.     coalesce(
  7.     battle_level_raw,
  8.         --取后面行第一个值(最接近)
  9.         --函数含义:分组排序取组内第一个值.
  10.         需求是:当前行的后面行的第一个值.true是忽略null值   否则跟原始值一样
  11.     first_value(battle_level_raw,true  )  
  12.         OVER(PARTITION BY role_gid ORDER BY nd  
  13.         ROWS BETWEEN CURRENT ROW and UNBOUNDED FOLLOWING) ,
  14.         取前面行最后值(最接近)
  15.        --函数含义:分组排序取组内最后一个值.
  16.         需求是:当前行的前面行的最后值.true是忽略null值   否则跟原始值一样
  17.     last_value(battle_level_raw ,true )
  18.         OVER(PARTITION BY role_gid ORDER BY nd  
  19.         ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
  20.     ) battle_level_notnull
  21.     from  nd_game_sd_sjmy.tmp_dws_user_adventure_role_bat_detail_di  ;
复制代码

有什么问题可以在背面提问哈,q15285610

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4