aaa,bbb,ccc ===> aaa
bbb
ccc
split('aaa,bbb,ccc',','); //根据逗号进行分割,将复合字段转化为hive数组类型
explode(split('aaa,bbb,ccc',',')); //对得到的数据使用explode函数拆分为多行
hive> select split('aaa,bbb,ccc',',');
OK
["aaa","bbb","ccc"]
----------------------------------------------
hive> select explode(split('aaa,bbb,ccc',','));
OK
aaa
bbb
ccc
name hobby
tom 唱歌,跳舞,弹琴
jack 唱歌,绘画,打篮球
tom 唱歌
tom 跳舞
tom 弹琴
jack 唱歌
jack 绘画
jack 打篮球
explode(split(hobby,',')) temp as x //此语句本身返回的就是一张虚拟表 记为temp 可以为temp表的列指定字段名x
student lateral view temp //使用later view可以直接关联两张表,保持原有映射关系
select student.name,temp.x from student lateral view explode(split(hobby,',')) temp as x;//完整写法
create external table student
(
name string,
hobby string
) row format delimited fields terminated by ' ';
load data local inpath '/root/student.txt' into table student;
hive> select student.name,temp.x from student lateral view explode(split(hobby,',')) temp as x;
OK
tom 唱歌
tom 跳舞
tom 弹琴
jack 唱歌
jack 绘画
jack 打篮球
aaa ===> aaa,bbb,ccc
bbb
ccc
collect_set(column) //将某一列所有数据转化为一个集合(去重)
concat_ws(',',collect_set(column)) //将集合中所有元素以逗号分割连接为字符串
select dep from dept;
销售
测试
开发
算法
--------------------------------------------------------
select concat_ws(',',collect_set(dep)) from dept;
销售,测试,开发,算法
name hobby
tom 唱歌
tom 跳舞
tom 弹琴
jack 唱歌
jack 绘画
jack 打篮球
结果数据
tom 唱歌,跳舞,弹琴
jack 唱歌,绘画,打篮球
create external table stu
(
name string,
hobby string
) row format delimited fields terminated by ' ';
load data local inpath '/root/stu.txt' into table stu;
OK
jack 唱歌,绘画,打篮球
tom 唱歌,跳舞,弹琴