ToB企服应用市场:ToB评测及商务社交产业平台
标题:
hive的first_value、last_value函数,可取非null值
[打印本页]
作者:
莱莱
时间:
2024-12-1 20:23
标题:
hive的first_value、last_value函数,可取非null值
1、原始数据准备
创建hive表、插入数据如下:
CREATE TABLE data (id INT, value INT);
INSERT INTO data (id, value) VALUES
(1, NULL),
(2, NULL),
(3, NULL),
(4, NULL),
(5, 99),
(6, NULL),
(7, NULL),
(8, 101),
(9, NULL),
(10, NULL);
复制代码
查询数据
2、函数使用
1、函数说明:
first_value:函数用于返回当前第一个值。可开启true下令,跳过null值
last_value:函数用于返回当前最后个值。可开启true下令,跳过null值
select
id,
value,
--1、取第一个值。null也正常取值
first_value(value) over(order by id),
--2、第一行到当前行,取第一个非null的值
first_value(value,true) over(order by id ),
--3、取当前行,到最后行,第一个非null值。
--业务需求:取当前行之后的,最近的非null值
first_value(value,true)
over(order by id rows between current row and unbounded following)
from data;
复制代码
查询结果:
3、需求
战斗力连续:取近30天的数据,一个账号不是每天都登录,则需要用前后的数据举行填充。
使用窗口函数 LAST_VALUE 和 FIRST_VALUE 分别查找前面和背面近来非NULL值。
需求:某一行数据为null,按今日与登录日期的差值举行升序。本举动null,则往行数高的取,取近来的行数值。如果往高的没有,再往小的行数取,取行数最接近的值、如下面null值,需要填充
SELECT
role_gid,
nd, --值为1、2、3、、、、28
level_raw,
battle_level_raw,
coalesce(
battle_level_raw,
--取后面行第一个值(最接近)
--函数含义:分组排序取组内第一个值.
需求是:当前行的后面行的第一个值.true是忽略null值 否则跟原始值一样
first_value(battle_level_raw,true )
OVER(PARTITION BY role_gid ORDER BY nd
ROWS BETWEEN CURRENT ROW and UNBOUNDED FOLLOWING) ,
取前面行最后值(最接近)
--函数含义:分组排序取组内最后一个值.
需求是:当前行的前面行的最后值.true是忽略null值 否则跟原始值一样
last_value(battle_level_raw ,true )
OVER(PARTITION BY role_gid ORDER BY nd
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
) battle_level_notnull
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