Hive 基于时间戳选择最新值的配置单元数据

Hive 基于时间戳选择最新值的配置单元数据,hive,hiveql,Hive,Hiveql,我有一个包含以下列的表 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,

我有一个包含以下列的表

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
现在,我想根据最新的
processtimestamp
获取每个主键的唯一行

如果
processtimestamp
相同,则应选择具有最新
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实现这一点

我目前正在使用hive 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;

对一个结构进行最大值比较时,首先比较第一个字段,然后比较第二个字段,以此类推。因此,如果将所有内容组合在一起,首先使用解析的时间戳值,则会得到一个表示该行的结构。然后通过选择单独的字段来构造它。

< P>你应该考虑升级HIVE,这可以很容易地用一个包含在HiVE 11中的窗口函数来完成。 升级配置单元不需要更新整个集群,只需将其部署到一个节点即可