我有一个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
答案 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时,这将给出精确的百分位值。