蜂巢百分位数由两个变量组成

时间:2018-08-24 13:06:35

标签: hive hiveql

我有一个Hive表,我想在该表中按位置/工作日查找值的第10个百分位数,中位数和第90个百分位数。该表的模型如下。如何编写查询,以便输出表列为MyValue的位置,工作日,第10个百分点,中位数和第90个百分点? (假设实际表有很多不同的位置,并且每个位置/工作日的组合有多个条目)

我尝试过:

create table myschema.my_output_table as
select location, weekday,
percentile(MyValue,0.1) over location,weekday as Weekday10pctile
from myschema.my_input_table

样本数据:

Location      Weekday       MyValue
Location_A    Monday        2.844958857
Location_A    Monday        1.22455235
Location_A    Monday        2.415189236
Location_A    Monday        2.162431558
Location_A    Tuesday       2.200264375
Location_A    Tuesday       1.218341845
Location_A    Tuesday       1.668882003
Location_A    Tuesday       0.077343061
Location_A    Wednesday     2.977162672
Location_A    Wednesday     2.059018125
Location_A    Wednesday     2.309147998
Location_A    Wednesday     1.241566476

1 个答案:

答案 0 :(得分:0)

使用percentile_approx函数,因为列中的值为DOUBLE。请注意,返回的值可能不在数据集中。

select location, weekday,
percentile(MyValue,0.1) over w as Weekday10pctile,
percentile(MyValue,0.9) over w as Weekday90pctile
from myschema.my_input_table
window w as (partition by location,weekday)

percentile_approx description from the documentation

  

percentile_approx(DOUBLE col,p [,B])

     

返回组中数字列(包括浮点类型)的大约pth百分位数。 B参数控制近似精度,但要以存储为代价。值越高,近似值越好,默认值为10,000。当col中的不同值的数量小于B时,这将给出精确的百分位值。