1、行转列
假设有如下 student 表:
表1
class | name |
---|---|
1001 | ‘mike’, ‘lucy’,‘peter’ |
1002 | ‘james’,‘david’ |
希望得到如下结果:
表2
class | name |
---|---|
1001 | mike |
1001 | lucy |
1001 | peter |
1002 | james |
1002 | david |
此类场景就属于行转列的问题,可以使用 lateral view explode来求解:
- lateral view用于和split、explode等UDTF一起使用,能将一行数据拆分成多行数据,在此基础上可以对拆分的数据进行聚合。
- lateral view首先为原始表的每行调用UDTF,UDTF会把一行拆分成一行或者多行,lateral view再把结果组合,产生一个支持别名表的虚拟表。
对于以上例子,可以这么实现:
- 首先使用split()函数对name字段进行分割,得到由名字组成的列表。
- 使用 lateral view explode 将一行数据拆成多行。