gpt4 book ai didi

hadoop - hive 如何获取每组分组结果的非分组列?

转载 作者:行者123 更新时间:2023-12-02 21:20:18 25 4
gpt4 key购买 nike

我有一个类似于以下的表格。

|name  |   grp   |  dt    
------------------------------
|foo | A | 2016-01-01
|bar | A | 2016-01-02
|hai | B | 2016-01-01
|bai | B | 2016-01-02
|baz | C | 2016-01-01

对于每个组,我想找到其 name为最新的 dt。换句话说,MAX(dt),由grp组成的GROUP,并将其dt是该组的最大值的名称与输出相关联:
|name  |   grp   |  dt    
------------------------------
|bar | A | 2016-01-02
|bai | B | 2016-01-02
|baz | C | 2016-01-01

在Oracle中,以下查询有效且非常干净(取自 here):
SELECT o.name, o.grp, o.dt 
FROM tab o
LEFT JOIN tab b
ON o.grp = b.grp AND o.dt < b.dt
WHERE b.dt IS NULL

但是,这失败了 [Error 10017]: Line 4:43 Both left and right aliases encountered in JOIN 'service_effective_from'从另一个 question引用 documentation,我知道我不能在join语句中使用不等式运算符:

Only equality joins, outer joins, and left semi joins are supported in Hive. Hive does not support join conditions that are not equality conditions as it is very difficult to express such conditions as a map/reduce job.



鉴于我不能在联接条件下使用不等式运算符,因此在Hive中获得此解决方案的干净方法是什么?

最佳答案

以下工作取自here,但我认为它不是很干净:

SELECT o.name, ogrp, o.dt
FROM tab o
JOIN (
SELECT grp, MAX(dt) dt
FROM tab
GROUP BY grp
) b
ON o.grp = b.grp AND o.dt = b.dt

顺便说一句,在我的环境中,一个具有4行的可比较测试表需要164秒。

关于hadoop - hive 如何获取每组分组结果的非分组列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37580184/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com