目录
二、json_tuple 和 get_json_object 的用法与区别以及性能上的差异
三、group_concat,concat_ws,wm_concat 的区别,举例说明
四、collect_list,collect_set的区别,举例说明
3、总结 collect_list 和 collect_set
五、了解grouping set 和 cube 语法,举例说明
一、lateral view 用法
(1)首先了解 split用法
用来按照指定 字符串 切割字符 返回切割后的字符串数组
如原表为
使用split返回的
(2)explode函数
explode()函数用于打散行的函数(将一行的数据拆分成多行,它的参数必须为map或array)。这个函数常和split()并用
(3) lateral view 函数
在(2)的基础上如果我还想要 age 可以使用lateral view进行合并
lateral view 后产生的虚拟表会和原表进行笛卡尔积
如果将name id都拆开有
二、json_tuple 和 get_json_object 的用法与区别以及性能上的差异
用法上
select json_tuple(line,'ceo','company','city','phone') as (ceo,company,address,phone)
from json_test;
#一般用来解析json字符串的多个字段
select GET_JSON_OBJECT(line,'$.ceo') as ceo
from json_test
#一般用来解析json字符串的一个字段
性能上
取多个key值时,json_tuple只解析一次,而get_json_object需要解析多次。
三、group_concat,concat_ws,wm_concat 的区别,举例说明
1、group_concat
如下一个表的数据
使用group_concat
也可以指定分隔符
select name ,group_concat(id order by id separator '-' ) from test3 group by name
2、wm_concat
ORACLE中的和group_concat用法一样
3、concat_ws
可以指定连接字符中的分隔符
如下数据
使用 concat_ws
四、collect_list,collect_set的区别,举例说明
如下数据
1、使用 collect_list
2、使用 collect_set
3、总结 collect_list 和 collect_set
将列转换成行的集合 但是 collect_set 对结果去重
五、了解grouping set 和 cube 语法,举例说明
数据如下
1、 使用 grouping set
就相当于
select a
,b
,sum(c)
from test4
group by a,b
union all
select a
,null as b
,sum(c)
from test4
group by a
union all
select null as a
, b
,sum(c)
from test4
group by b
2、使用cube
就相当于在 ab , a ,b 的基础上加上一个全部的group by
select a
,b
,sum(c)
from test4
group by a,b
union all
select a
,null as b
,sum(c)
from test4
group by a
union all
select null as a
, b
,sum(c)
from test4
group by b
union all
select null as a
,null as b
,sum(c)
from test4