我有一个包含以下各列的表。
C1,C2,Process TimeStamp,InsertDateTimeStamp
p1,v1,2014-01-30 12:15:23,2013-10-01 05:34:23
p1,v2,2014-01-31 05:11:34,2013-12-01 06:12:31
p1,v3,2014-01-31 07:16:05,2012-09-01 07:45:20
p2,v4,2014-02-01 09:22:52,2013-12-01 06:12:31
p2,v5,2014-02-01 09:22:52,2012-09-01 07:45:20
现在,我想基于Latest获取每个主键的唯一行Process TimeStamp
。
如果Process TimeStamp
相同,InsertDateTimeStamp
则应选择最新的行。
所以,我的结果应该是。
p1,v3,2014-01-31 07:16:05,2012-09-01 07:45:20
p2,v4,2014-02-01 09:22:52,2013-12-01 06:12:31
如何通过HiveQL实现这一目标?
我目前正在使用配置单元0.10。我不能将子查询与IN或EXISTS一起使用。
谢谢。
select C1, s.C2, s.ProcessTimeStamp, s.InsertDateTimeStamp from (
select C1, max(named_struct('unixtime', unix_timestamp(ProcessTimeStamp, 'yyyy-MM-dd HH:mm:ss'), 'C2', C2, 'ProcessTimeStamp', ProcessTimeStamp, 'InsertDateTimeStamp', InsertDateTimeStamp)) as s
from my_table group by C1
) t;
进行结构的最大值按第一个字段进行比较,然后按第二个字段进行比较,依此类推。因此,如果将所有内容一起进行结构化(首先使用已解析的时间戳记值),则会得到一个代表该行的结构。然后只需通过选择各个字段来取消构造它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句