原表:
a | b |
---|---|
Andy | <碟中谍>,<谍影重重>,<007> |
MOMO | <小鞋子>,<朋友啊你的家在哪里> |
David | ‘’ |
Lily | NULL |
实现效果
a | b |
---|---|
Andy | <碟中谍> |
Andy | <谍影重重> |
Andy | <007> |
MOMO | <小鞋子> |
MOMO | <朋友啊你的家在哪里> |
David | ‘’ |
实现代码:
select a
,film_list
from tb_name
lateral view explode(split(b,',')) t as film_list
;
注:
- explode函数:处理map结构的字段,将数组转换成多行,所以此处使用了split函数将b列转为array数组类型。
- David记录对应的空字符串在列转行时可以保留,但是Lily记录对应的NULL值在列转行时未被保留,若需保留该行记录,可以通过以下方式实现:
select a
,film_list
from tb_name
lateral view outer explode(split(b,',')) t as film_list
;
实现效果
a | b |
---|---|
Andy | <碟中谍> |
Andy | <谍影重重> |
Andy | <007> |
MOMO | <小鞋子> |
MOMO | <朋友啊你的家在哪里> |
David | ‘’ |
Lily | NULL |