hive随笔4

1.row_number() //窗口函数–一般用于分组中求TopN
需求:每。。。。。前几名。。。。。
//给每个分组数据打上行号
作用:把每一组的每一行都打上数字,1,2,3…然后取自己要用的行
语法:
select * from (select name,data_time,row_number() over(partition by name order cost desc) as rn
from window_t) a where rn=1 ;

数据样式:
用户 停留日期 停留时间
user date1 date2
user1 20190101 10
user1 20190102 20
user1 20190103 30
user2 20190104 40
user2 20190105 30
user2 20190106 20

create table test(
user string,
date1 string,
date2 string
)

需求1:user在不同的日期中的最大停留时间
需求1:user在不同的日期中的最大停留时间的前两个
需求3:每一个user在不同的日期中的最大停留时间的前两个

select *,row_nauber() over(partition by user order by date2 desc) as rn from test;
输出为:
user1 20190101 30 1
user1 20190102 20 2
user1 20190103 10 3
user2 20190104 40 1
user2 20190104 30 2
user2 20190104 20 3

select * from (select *,row_nauber() over(partition by user order by date2 desc) as rn from test) w
where w.rn <= 2 ;
输出为:
user1 20190101 30 1
user1 20190102 20 2
user2 20190104 40 1
user2 20190104 30 2

2.later view //行转列
(1)later view 用于和split,explode等udft一起使用,它能够将一行数据拆成多行数据,在此基础上可以
对拆分后的数据进行聚合。later view 首先为原始表的每行调用udft,udft会把一行拆分成一行或者
多行,later view在把结果组合,产生一个支持别名表的虚拟表。
(2)explode函数,参数仅接受array和map类型,不支持两个一起用。所以later view可以解决

语法:
create table later test(name string,weight array)
row format delimited fields terminated by ‘\t’
collection items terminated by ‘,’ ;

select name new_num from later_test laterral view
explode(weight) num as new_num ;

单词统计:
select w.word,count(*) from
(select explode(split,’ ')) word from wc_test) w group by w.word ;

案例:
create table test(
id int,
num array
)

数据:
1 [100,200]
2 [300,400]

select name new_num from later_test laterral view
explode(weight) num as new_num ;

输出为:
1 100
1 200
2 300
2 400

3.列转行,集合不去重函数:collect_list //collect_set --去重 //列转行
语法:collect_list(col)
hive>
select name,age from person;
返回值:array
说明:将col字段合并成一个数组,不去重
举例

create table person(
name string,
age string
)

数据
name age
aa 10
aa 12
aa 15

select name,collect_list(age) from person group by name;
输出为:
aa [“10”,“12”,“15”]

4.向下取整数:floor
语法:floor(double a)
返回值:bigint
说明:返回等于或者小于该double变量的最大的整数
举例
hive>
select floor(301415);
3
select floor(399995);
3
select floor(30);
30

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值