HIVE函数之行转列

       小白之前经常在工作中遇到需要行转列的情况,这次就总结一下,之前遇到过的各种情况,及在各种情况下的函数应用。

场景:

现有一个表,表示一个房型在未来60天的是否可订情况,由于房型的数据量是庞大的,可能达到几十亿,那么在展示时,就需要把可订酒店的可订天数展示为一个字段,这样就会缩小整个表的行数。

id isbook time
698570 0 2019-07-11
698570 0 2019-07-12
698570 0 2019-07-13
698570 0 2019-07-14
698570 0 2019-07-15
698570 0 2019-07-16
698570 0 2019-07-17
698570 0 2019-07-18
698570 0 2019-07-19
698570 0 2019-07-20

将这样的数据变为一行展示,就使用到之前博文中讲到的concat_ws函数,具体使用可以参考之前博文(https://blog.csdn.net/Jarry_cm/article/details/86995580),这个函数与collect_set或者collect_list匹配使用可以达到不同的效果。collect_set函数是对统计的数据进行去重,然后拼接在一起,collect_list是不去重,直接所有出现的值进行拼接。

语法如下,以collect_list为例:

select id,
       isbook,
       concat_ws (',', collect_list(time)) as effectdateList
  from table
 group by id,isbook

结果为(因为本数据中没有重复的日期,所以是所有日期的拼接结果,两个函数一样,有重复的日期时,函数的区别就体现出来了,这里就不另外在举例):

id isbook effectdateList
698570 0 2019-07-18,2019-07-13,2019-07-14,2019-07-11,2019-07-16,2019-07-15,2019-07-17,2019-07-20,2019-07-12,2019-07-19

 

你可能感兴趣的:(技术,数据库)