我如何获得最新记录?

时间:2015-07-23 14:39:41

标签: hive distinct records

这是我的表:

create table test (
id string,
name string,
age string,
modified string)

这是我的数据:

id    name   age  modifed
1     a      10   2011-11-11 11:11:11
1     a      11   2012-11-11 12:00:00
2     b      20   2012-12-10 10:11:12
2     b      20   2012-12-10 10:11:12
2     b      20   2012-12-12 10:11:12
2     b      20   2012-12-15 10:11:12

我想通过id获取最新记录(包括每个列的id,name,age,modified)组,如上面的数据,正确的结果是:

1     a      11   2012-11-11 12:00:00
2     b      20   2012-12-15 10:11:12

我在hive中使用下面的查询,它在sql http://sqlfiddle.com/#!2/bfbd5/42中工作正常但在hive中工作不正常

select * from test where (id, modified) in(select id, max(modified) from test group by id)

我正在使用0.13版本的配置单元。

1 个答案:

答案 0 :(得分:0)

Hive只允许IN子查询中的一列。尝试左半连接:

SELECT *
FROM test a 
LEFT SEMI JOIN 
(select id, max(modified) as modified from test) b 
ON (a.modified = b.modified and a.id=b.id);

看起来你可以很容易地使用直接查询得到正确答案。选择两列的最大值,并确保按没有聚合函数的列进行分组。

select id
, name
, max(age) as age
, max(modified) as modified
from test
group by id, name;