hive难点以及例子SXT

这篇博客详细讲解了Hive中的难点,包括炸裂函数的使用注意事项,如只取炸裂字段和保留原表字段;partition by 和 distribute by 的区别及其等价性;以及窗口函数的应用,如排名函数和distinct的优化。通过三个具体的例子,深入探讨了如何在实践中应用这些概念。
摘要由CSDN通过智能技术生成
一、炸裂函数注意点

1、只取炸裂字段

select
explode(字段名)
from
表名

2、原表中的字段和炸裂字段

select
表中字段,
列的别名
from 
表名
lateral view explode(字段名) 炸裂开表的别名 as 列的别名
二、partition by 与 distribute by

partition by name order by orderdate 与distribute by name sort by orderdate 结果是一样的。

三、窗口函数
current row :当前行
n perceding :往前n行数据
n follewing :往后n行数据
unbonded : 起点 ,unbounded perceding 表示从前面的起点 unbounded following :表示到后面的终点
ntile(n):把有序分区中的行分发到指定数据的组中,各个组有编号,编号从1开始,对于每一行,ntile返回此行所属的组的编号。

理解: 把数据根据顺序分N 组,可以用于取百分子多少的数据

排名函数是窗口函数

rank():1134
dense_rank():1123
row_number():1234

distinct的优化

select 
shop,
count( distinct id) uv
from
visit
group by shop
;

--优化用group by 实现去重

select
shop count(id) uv
from
(
select
shop,
id
from visit
group by shop,id 
) t1
group by shop
;

 


三、例题

格式化日期

date_format(regexp_replace(data_dt,'/','-'),'yyyy-MM');
例子1

[外链图片转存失败(img-6cmp9Zps-1569033300770)(C:\Users\12847\Desktop\NOTES\Apart03Hadoop\imgs\例子1.png)]

--数据准备  visit

u01 2017/1/21 5
u02 2017/1/23 6
u03 2017/1/22 8
u04 2017/1/20 3
u01 2017/1/23 6
u01 2017/2/21 8
u02 2017/1/23 6
u01 2017/2/22 4
-- 创建表
create table visit1(
userId string,
visitDate string,
visitCount int)
row format delimited fields terminated by " "
;
-- 查询过程
1、格式化日期
select
userId,
date_format(regexp_replace(visitDate,'/','-'),'yyyy-MM') visiteDate,
visitCount
from
visit1
;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值