Hive学习笔记:实现group_concat进行有序分组拼接

MySQL 中有 group_concat 进行分组拼接字符串的功能,但 hive 中没有这个函数,需要进行折中处理。

具体可参考以前文章:Hive学习笔记:列转行之collect_list/collect_set/concat_ws

功能更新

对于拼接的字段进行排序,例如:

有多个渠道来源的情况下,“线上”和“线下”渠道,拼接起来有两种情况,需要进行统一排序。

-- 分组拼接
select max(corp_name) as corp_name,
       acc_nbr,
       max(update_date) as update_date,
       concat_ws('|', sort_array(collect_list(channel))) as channel
from 
(
    select corp_name,
           acc_nbr,
           update_date,
           channel,
           row_number() over(partition by acc_nbr order by channel asc) as rn
    from tmp_cwh_table
    where acc_nbr in  ('aaa', 'bbb', 'ccc', 'ddd')
) dd
group by acc_nbr
/*
channel	_c1
线上|线下	10
线上	703
线下	1602
*/

通过 sort_arraycollect_list 得到的组合进行排序,再拼接即可。

参考链接:hive中实现group_concat

posted @ 2023-03-08 16:07  Hider1214  阅读(1643)  评论(0编辑  收藏  举报