hive分位函数percentile和percentile_approx误区和解决方案
先说结论
percentile和percentile_approx对分位数的计算是不同的!!!
拿中位数来说,
percentile(col, 0.5),结果和正常理解的中位数相同,即col排序后最中间的一个数(col观察数为奇数时)或者最中间两个数的平均数(col观察数为偶数时)为中位数;
percentile_approx(col, 0.5),则是按照等频划分的方法来计算中位数的。
分位函数用法
介绍分位函数的用法
percentile(col, p):col是要计算的列(值必须为整数类型);参数p取值为0-1。
当需要多个分位数的时候,可以用array数组,格式为:percentile(col, array(p1, p2, …,pn))
percentile_approx(col, p, B):col是要计算的列(值可以是浮点类型);参数p取值为0-1;参数B控制内存消耗的近似精度,B越大,结果的精度越高,默认值为10000,当col字段中的distinct值的个数小于B时,结果就为准确的百分位数,可不填。
当需要多个分位数的时候,可以用array数组,格式为:percentile_approx(col, array(p1, p2, …,pn), B)
分位函数用法示例
建表语句:col_int 为整数,col_double 为浮点数
CREATE TABLE test.test_table
(
`col_int` int
,`col_double` double
)
插入数据:9条ÿ