查看原文
其他

HiveSQL高级进阶技巧(下)

The following article is from BAT大数据架构 Author 花荣

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


1.-取前20%的方法1

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



2.–取前20%的方法2

SELECT user_id,pv, NTILE(5) OVER(ORDER BY pv DESC) AS rnFROM tmpwhere 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,namefrom tmp lateral view explode(name_array) t as names;


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

select id,namefrom 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

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存