根据 Presto/Hive 中的列值聚合列

Ace*_*rey 1 hive presto hiveql

我正在尝试创建一个数据集,在其中我根据另一列的值聚合一列。举个例子

 id      | score | id2 | offensive 
---------+-------+-----+-----------
 a1      | 1.2   | 1   | false     
 a2      | 36.0  | 1   | true      
 a3      | 1.2   | 1   | true      
 a4      | 36.0  | 1   | false  
Run Code Online (Sandbox Code Playgroud)

我想要的是最终创建一个包含两个列表的数组,以按攻击性列和与其相关的 id 进行分组,并按分值对它们进行排序。类似于以下内容:

 id      |id2  | clean_group | offensive_group
---------+-----+-------------+-----------------
 a1      | 1   | [a2, a3]    | [a4, a1]
 a2      | 1   | [a2, a3]    | [a4, a1]
 a3      | 1   | [a2, a3]    | [a4, a1]
 a4      | 1   | [a2, a3]    | [a4, a1]
Run Code Online (Sandbox Code Playgroud)

我知道这是冗余数据,但这是要求,应该注意 id 都是不同且唯一的,而 id2 都是相同的。我一直在寻找array_aggpresto 和collect_sethive中的函数来尝试实现这一点,但遇到了很多麻烦。

任何人都可以帮忙吗?我们是否能够以某种方式在我们说array_agg(id where offensive=true)等的地方以某种方式传递条件?

Dai*_*rom 5

我认为您想要使用过滤器语法进行聚合:array_agg(id) filter (where offensive). 这只会处理与过滤器匹配的行。