暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

HiveSQL高级进阶技巧(下)

BAT大数据架构 2021-11-14
2351

直接上干货,HiveSQL高级进阶技巧,重要性不言而喻。掌握这10个技巧(下),你的SQL水平将有一个质的提升!


1.-取前20%的方法1

select *
from (
select
row_number() over(order by pv) as rn,
count(1over() rn_cnt
) t1
where rn / rn_cnt <= 0.2



2.–取前20%的方法2

SELECT user_id,pv,
NTILE(5OVER(ORDER BY pv DESCAS rn
FROM tmp
where rn = 1



分位数:


3.percentile:percentile(col, p) col是要计算的列(值必须为int类型),p的取值为0-1,若为0.2,那么就是2分位数,依次类推。

SELECT percentile(number,0.5) from tmp;


4.percentile_approx:percentile_approx(col, p)。列为数值类型都可以。

percentile_approx还有一种形式percentile_approx(col, p,B),参数B控制内存消耗的近似精度,B越大,结果的精度越高。默认值为10000。当col字段中的distinct值的个数小于B时,结果就为准确的百分位数。

-- 取0.2,0.4位置的数据
select percentile(score,<0.2,0.4>) from tmp;

 


5.lateral view explode相当于笛卡尔乘积:

select id,name
from tmp 
lateral view explode(name_array) t as names;


6.Outer关键字可以把不输出的UDTF的空结果,输出成NULL,防止丢失数据。

select id,name
from tmp
lateral view OUTER explode(name_array) t as names;


排序:


 7.order by

普通排序,通过order对字段进行降序或者升序

select * from tmp order by id;


8.sort by

对每一个Reduce的结果进行排序,为了看出效果,我们多设置几个Reduce,查看每个Reduce的结果是否是排序的。

set mapreduce.job.reduces=3;


9.distribute by

distribute by设置分区,根据什么来分区,分区就是让什么字段的什么值放在哪一个分区上,设置分区之后再跟进sal进行排序。


10.cluster by

cluster by就是distribute by+sort by的组合,但是只能默认升序。




上篇:HiveSQL高级进阶技巧


如果觉得本文对您有帮助,可关注我们 。有疑惑也可加我微信一起讨论:bat6188

文章转载自BAT大数据架构,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论