记录hive/spark取最新且不为null的方法

听标题可能听不懂我想表达的意思,我来描述一下我要做的事:

比如采集同学对某一网站进行数据采集,同一个用户每天会有很多条记录,所以我们要取一条这个用户最新的状态,比如用户改了N次昵称,我们只想得到最后一次修改的结果,但是用窗口函数row_number按时间排序的话,可能最后一条某些字段没采集到,但是之前是有采集到的,所以应该在按时间倒序排的基础上,遇到null值,再往前取,直到所有字段尽可能取到最新的、不为null的值,最后存到表里。

比如下面的例子:

我们应该得到1,b,10,2023-12-01 00:04:00

可以使用struct函数将时间字段和属性字段拼接起来,当属性字段是null时,赋值为0(这样可以使其排名靠后),然后取max,再取出来属性值,sql如下:

sql 复制代码
SELECT id,
       aa.name,
       bb.age
FROM
  (SELECT id,
          max(struct(if(name IS NULL,0,addtime),name)) aa,
          max(struct(if(age IS NULL,0,addtime),age)) bb
   FROM your_table
   GROUP BY id)t1
相关推荐
是阿威啊13 小时前
【第二站】本地hadoop集群配置yarn模式
大数据·linux·hadoop·yarn
好大哥呀18 小时前
Hadoop yarn
大数据·hadoop·分布式
红队it18 小时前
【数据分析】基于Spark链家网租房数据分析可视化大屏(完整系统源码+数据库+开发笔记+详细部署教程+虚拟机分布式启动教程)✅
java·数据库·hadoop·分布式·python·数据分析·spark
本旺2 天前
【数据开发离谱场景记录】Hive + ES 复杂查询场景处理
hive·hadoop·elasticsearch
莫叫石榴姐2 天前
Doris为2.1版本,但json_each不可以用解决方法
数据仓库·json
无泪无花月隐星沉2 天前
uos server 1070e部署Hadoop
大数据·运维·服务器·hadoop·分布式·uos·国产化os
悟能不能悟2 天前
springboot全局异常
大数据·hive·spring boot
是阿威啊2 天前
【第一站】本地虚拟机部署Hadoop分布式集群
大数据·linux·hadoop·分布式
lightningyang3 天前
Hadoop 分布式集群配置(OpenEuler 1主2)
hadoop·openeuler·天枢一体化虚拟仿真靶场平台
是阿威啊3 天前
【第六站】测试本地项目连接虚拟机上的大数据集群
大数据·linux·hive·hadoop·spark·yarn