Hive 查询以从最新分区中选择行

Posted

技术标签:

【中文标题】Hive 查询以从最新分区中选择行【英文标题】:Hive query to select rows from latest partition 【发布时间】:2020-07-28 09:06:25 【问题描述】:

我在 hive 中有一个分区表。架构和示例如下所示

item_id | price | brand | partition_id
AX_12      340.22  Apple.    356
AZ_47      230.00  Samsung   357
AX_12      321.00. Apple.    357
AQ_17.     125.00  Lenovo.   356

如果一个项目存在于多个分区中。我需要选择具有最新分区的行 所以这个例子的预期输出是这样的

item_id | price | brand | partition_id
AX_12      321.00  Apple.    357
AZ_47      230.00  Samsung   357
AQ_17.     125.00  Lenovo.   356

表中有10个分区,每个分区有1000万行

【问题讨论】:

【参考方案1】:

您可以使用窗口函数过滤每个组的顶部记录:

select t.*
from (
    select t.*, row_number() over(partition by item_id order by partition_id desc) rn 
    from mytable t
)
where rn = 1

一种典型的替代方法是使用相关子查询进行过滤:

select t.*
from mytable t
where t.partition_id = (
    select max(t1.partition_id) from mytbale t1 where t1.item_id = t.item_id
)

【讨论】:

以上是关于Hive 查询以从最新分区中选择行的主要内容,如果未能解决你的问题,请参考以下文章

如何从具有动态分区的选择查询中插入 Hive 中的列?

SQL 组行选择

Hive:执行错误选择并同时删除分区配置单元查询

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

选择最大查询返回 Apache Hive 中表中的所有行

Hive_分区表