Hive查询获取插入表中的最后一条记录
问题描述:
a date time b
35573407 20170412 140930 310260453908912
35573407 20170412 140930 310260453908912
35573407 20170412 141054 310260453908912
35573407 20170412 025339 310260453908912
35573407 20170412 072918 310260453908912
35573407 20170412 091105 310260453908912
35573422 20170412 193605 310260453908912
35573407 20170412 121105 310260453908912
35573407 20170412 032439 310260453908912
35573407 20170412 032605 310260453908912
我想弄清楚一个配置单元查询得到的最后一条记录插入表中与b。记录需要按时间列进行排序并获取最后一条记录。假设在上述记录中Hive查询获取插入表中的最后一条记录
35573422 20170412 193605 310260453908912
是最后一条记录。
答
select a,date,time,b
from (select *
,row_number() over
(
partition by b
order by date desc
,time desc
) as rn
from mytable
) t
where t.rn = 1
+----------+----------+--------+-----------------+
| a | date | time | b |
+----------+----------+--------+-----------------+
| 35573422 | 20170412 | 193605 | 310260453908912 |
+----------+----------+--------+-----------------+
答
请使用下面的,因为它会更快,并且可以适用于情况下,我们与条款使用子查询下推。
select t.group_col, t.struct_val.col1 as date, t.struct_val.col2 as time
from (select group_col, max(struct(date,time)) as struct_val from mytable) t
它不使用的日期/时间戳记类型或一个非常糟糕的做法至少是ISO数据/时间戳的格式(如果由于某种原因,你使用的是真的老了蜂巢版) –