行转列: 定义:就是把形如 id --------- name 1 --------- a 2 --------- a 3 --------- a 4 --------- a 的数据转换为 id ------------- name 1,2,3,4 --------- a 这里把四行的数据变成了由一行显示,这就是行转列。
首先要用到的是collect_set或者collect_list,前者去重,后者不去重,一般配合group使用,能把形如: id --------- name 1 --------- a 2 --------- a 3 --------- a 4 --------- a 转换为 id --------- name ["1","2","3","4"] --------- a
然后需要用到的是concat_ws函数,这个函数需要传递指定分隔符,以及字符串或者字符串数组。能起到把多个字符串拼接到一起的作用。 形如: id --------- name ["1","2","3","4"] --------- a 通过concat_ws(',',[1,2,3,4])转换为 id --------- name 1,2,3,4 --------- a
连起来就完成了行转列 一般sql为:
列转行 定义:就是把形如 id ------------- name 1,2,3,4 --------- a 的数据转换为 id --------- name 1 --------- a 2 --------- a 3 --------- a 4 --------- a 这里把一行的数据变成了由四行显示,这就是列转行。
首先要用到split函数,这个行数可以把字符串按照指定的规则切分为字符串数组。 形如: id --------- name 1,2,3,4 --------- a 通过split('1,2,3,4',',')转换为 id --------- name ["1","2","3","4"] --------- a
然后是explode函数,这个行数可以把数组的每个元素转换为一行。 形如 id ["1","2","3","4"] 通过explode(["1","2","3","4"] )转换为 id 1 2 3 4