某网站有一批用户访问日志记录,源数据如下:
Table_name: daily_log
我们想追踪这些用户在该网站内的访问路径,并存储在如下格式:
其实用hive-sql内置函数collect_set(或者collect_list)一行简单代码即可实现:
—-* hive-sqlCreate table result as Select user_id,concat_ws(‘,’,collect_set(location)) as location_trackingFrom ( select * from daily_log order by user_id,create_time) t group by t.user_id;
这里concat_ws是为了将已经合并好的字段用’,’分隔开,它与concat类似,只是去掉了两端。
collect_set也可以用collect_list替换,二者主要区别是输出的变量类型不同。前者是字符串类型,后者为array(数组)类型。
除此之外,collect_set会对合并内容去重,而collect_list保留所有的内容。