如何使用 rank 函数获取 hive 中的最新记录

Posted

技术标签:

【中文标题】如何使用 rank 函数获取 hive 中的最新记录【英文标题】:How to get the latest records in hive using rank function 【发布时间】:2017-09-19 17:26:36 【问题描述】:

我在 hive 中有下表,其中包含列 id、名称和时间戳

根据下面的时间戳应该是作为最新记录的输出:

【问题讨论】:

戈登是对的。如果您想获取每个 id 的最新信息,则只需要 rank 或 row_number 【参考方案1】:

您不需要排名。您的输出描述为:

select t.*
from t
order by t.transaction_time desc
limit 3;

编辑:

哦,你想要rank()dense_rank()

select t.*
from (select t.*,
             dense_rank() over (order by t.transaction_time desc) as seqnum
      from t
     ) t
where seqnum = 1;

【讨论】:

感谢您的询问,但我如何应用限制 3?因为我不知道在那个特定时间输入了多少条记录。可能是 3 或 30 条记录。【参考方案2】:

您可以为此使用rankrow_number

select *
from (
    select t.*,
        row_number() over (
            partition by name 
            order by transaction_time desc
            ) as seq
    from your_table t
    ) t 
where seq = 1;

【讨论】:

以上是关于如何使用 rank 函数获取 hive 中的最新记录的主要内容,如果未能解决你的问题,请参考以下文章

Hive函数

Hive函数

如何从 hive 获取最新的分区数据

使用 hive 中的 rank/dense_rank 查找每个部门的第二高薪水

hive:函数:排名函数:Rank(笔记)

Hive分析窗体函数之NTILE,ROW_NUMBER,RANK和DENSE_RANK