我有4列
date number Estimate Client
---- ------
1 3 10 A
2 NULL 10 Null
3 5 10 A
4 NULL 10 Null
5 NULL 10 Null
6 2 10 A
.......
我需要将空值替换为新值,该值采用日期列中上一个日期中最后一个已知值的值,例如:date=2 number=3,date 4 and 5 number=5 and 5。空值随机出现。
这需要在Hive里完成。
4条答案
按热度按时间tkclm6bt1#
下面是一个使用标准hiveql连接的解决方案。这应该适用于所有版本的Hive。表c合并了不为空的客户机的最近日期。后面的表d合并了与该日期相关联的编号。使用coalesce仅当数字为null时才使用附加值。
通过使用与备用解决方案类似的公共表表达式,可以对该查询进行更多优化。然而,这个解决方案不需要n次重复的行,应该是通用的。另一种解决方案中所需的数字n可能不是静态的,因为这种解决方案可能适用于更一般的情况。
ni65a41a2#
这是关于推拉窗的;
这是我的表格内容;
您所需要做的就是在precedings和当前行之间的窗口上滑动,找到最近的notnull值。
LAST_VALUE
windowable函数有一个参数可以忽略布尔值形式的空值。LAST_VALUE(<field>,<ignore_nulls> as boolean)
;结果将是;
ht4b089n3#
如果您使用的是sql,那么下面的查询就没有帮助了。否则可以使用ffill和bfill函数。
一些数据例如:
qlckcl4x4#
这实际上是一个相当棘手的问题,因为hive不支持递归CTE或相关子查询,这是解决此类问题的常用方法。
我能想到的唯一纯Hive方式就是做一堆自我连接。您必须在数据中执行尽可能多的最大长度的连续空值。