Hive 查询以获取插入表中的最后一条记录

Posted

技术标签:

【中文标题】Hive 查询以获取插入表中的最后一条记录【英文标题】:Hive Query to get the last record inserted in the table 【发布时间】:2017-04-14 19:01:10 【问题描述】:
 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

我正在尝试找出一个 hive 查询,它使用 b 将最后一条记录插入到表中。记录需要按时间列排序,得到最后一条记录。假设在上述记录中

35573422  20170412  193605  310260453908912

是最后一条记录。

【问题讨论】:

不使用日期/时间戳类型或至少 ISO 数据/时间戳格式是一种非常糟糕的做法(如果由于某种原因您使用的是非常旧的 Hive 版本) 【参考方案1】:
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 |
+----------+----------+--------+-----------------+

【讨论】:

【参考方案2】:

请使用下面的,因为它会更快,并且可以应用于子查询下推,以防我们使用 WITH 子句。

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

【讨论】:

以上是关于Hive 查询以获取插入表中的最后一条记录的主要内容,如果未能解决你的问题,请参考以下文章

将表单框中的值插入表格的最后一条记录

数据库中如何查询表的最后一条记录?

php检索插入的最后一条记录的ID并将其插入另一个表中

SQL查询从链接表中检索最后一条记录[重复]

Python查询sql db中的最后一条记录,但返回空白记录

如何在使用 PHP-PDO 记录查询时获取最后一个插入 ID