Hive 查询打印多个条目的 collect_set 值,如果条目是一次则不打印

Posted

技术标签:

【中文标题】Hive 查询打印多个条目的 collect_set 值,如果条目是一次则不打印【英文标题】:Hive query to print the collect_set value for multiple entries and not to print if the entry is once 【发布时间】:2020-11-13 14:16:18 【问题描述】:

我在蜂巢中的桌子:

Group1  |       sibling

=====================

ad3jkfk            4

ad3jkfk            4

ad3jkfk            2

fkjh43f            1

fkjh43f            8

fkjh43f            8

rjkhd93            7

rjkhd93            4

rjkhd93            7

abcd45             1

defg63             1

预期结果:

Group1   |       sibling

===========================

ad3jkfk          4,4,2

fkjh43f          1,8,8 

rjkhd93          7,4,7

【问题讨论】:

【参考方案1】:

collect_set 产生一个不同值的数组。对于 ad3jkfk,它将产生 4,2,而不是 4,4,2

如果你想要4,4,2,请使用collect_list()

要过滤超过 1 个元素的数组,请使用 size() 函数:

select Group1, concat_ws(',',sibling_list)  sibling --Concatenate array to string delimited w comma like in your example
from
(
select Group1, collect_list(sibling) sibling_list --get the list
  from mytable
 group by Group1
)s
where size(sibling_list)>1 --filter

【讨论】:

以上是关于Hive 查询打印多个条目的 collect_set 值,如果条目是一次则不打印的主要内容,如果未能解决你的问题,请参考以下文章

Hive 查询优化总结

我怎样才能让这个程序也打印列表中的第一个条目?

在 Spark 上打印查询 Hive 的物理计划

我想在表 A 中提取一些在表 B 中没有条目的列。如何在 Hive 中实现这一点?

HIVE 列表型的str中的元素去重

多个连接的 HiveQL 查询