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_array
对 collect_list
得到的组合进行排序,再拼接即可。
参考链接:hive中实现group_concat