我最近从使用Presto过渡到Hive。我有以下情况。 A,B,C列。我想对A进行汇总,然后找到B的值,将C的值最小化。事先可以这样
SELECT A, min_by(B, C) from <TABLE> GROUP BY A
现在我想在Hive中做同样的事情。但是不幸的是,我在文档中的任何地方都找不到类似的UDF。现在我知道我可以做以下事情了
SELECT A, COALESCE(B, 0)
from <TABLE> as primary
JOIN (
SELECT A, MIN(C) as C FROM <TABLE> GROUP BY A
) secondary
ON primary.A = secondary.A AND primary.C = secondary.C\
GROUP BY A
此解决方案有2个问题
是否可以在不编写自定义UDF的情况下实现我要执行的操作?
答案 0 :(得分:2)
联接的工作速度比解析函数慢,请尝试不使用联接的此方法,并且表将仅扫描一次:
select s.*
from
(
SELECT A, COALESCE(B, 0) as B, C
min(C) over (partition by A) as min_C
from <TABLE> as primary
)s
where s.C=s.min_C;
如果需要通过更多组列计算min(C),请将其添加到partition BY
子句中。
答案 1 :(得分:0)
您可以在蜂巢中尝试TD_first(B,C)。以相同的方式工作。