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

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

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

        比如下面的例子:

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

可以使用struct函数将时间字段和属性字段拼接起来,当属性字段是null时,赋值为0(这样可以使其排名靠后),然后取max,再取出来属性值,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

最近更新

  1. TCP协议是安全的吗?

    2023-12-09 06:26:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-09 06:26:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-09 06:26:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-09 06:26:02       20 阅读

热门阅读

  1. G1 GC基本逻辑

    2023-12-09 06:26:02       29 阅读
  2. LeetCode738. Monotone Increasing Digits

    2023-12-09 06:26:02       29 阅读
  3. ES6中新增的基本数据类型----symbol

    2023-12-09 06:26:02       30 阅读
  4. postgresql数据库配置主从并配置ssl加密

    2023-12-09 06:26:02       43 阅读
  5. markdown快捷键

    2023-12-09 06:26:02       37 阅读
  6. Netty多路复用机制select、poll 和 epoll的区别

    2023-12-09 06:26:02       34 阅读
  7. CentOS常用基础命令大全(linux命令)2

    2023-12-09 06:26:02       29 阅读
  8. 新零售时代:直销与分销的善用与融合

    2023-12-09 06:26:02       38 阅读
  9. TCP&&UDP使用场景讨论

    2023-12-09 06:26:02       39 阅读