我在 HiveQL 中寻找 argmax() 类型函数,并在他们的错误跟踪器 ( https://issues.apache.org/jira/browse/HIVE-1128 ) 中发现了一个几乎没有记录的功能,它通过使用 max( ) 的结构,它根据第一个元素找到最大值并返回整个结构。(实际上,也许 max() 会通过查看后续元素来打破关系?我不知道。)
无论如何,如果我本质上想选择包含某个列的最大值的整行,我可以先将该行打包成一个具有比较值的结构,然后提取最大结构以重建最佳行。但是语法是重复的和丑陋的。有更好的方法吗?(我猜自加入是另一种选择,但似乎不太优雅,而且我猜效率较低?)
示例表:
id,val,key
1,1,A
1,2,B
1,3,C
1,2,D
2,1,E
2,1,U
2,2,V
2,3,W
2,2,X
2,1,Y
HiveQL:
select
max(struct(val, key, id)).col3 as max_id, -- for illustration, grouping on id anyway
max(struct(val, key, id)).col1 as max_val,
max(struct(val, key, id)).col2 as max_key
from test_argmax
group by id
结果:
max_id,max_val,max_key
1,3,C
2,3,W