hive扩展题目

目录

一、lateral view 用法

(1)首先了解 split用法

(2)explode函数 

(3) lateral view 函数

二、json_tuple 和 get_json_object 的用法与区别以及性能上的差异

三、group_concat,concat_ws,wm_concat 的区别,举例说明

1、group_concat

2、wm_concat 

3、concat_ws

四、collect_list,collect_set的区别,举例说明

1、使用  collect_list

2、使用 collect_set

3、总结 collect_list 和 collect_set

五、了解grouping set 和 cube 语法,举例说明

1、 使用 grouping set

2、使用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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值