【问题标题】:Hive percentile group by two variablesHive 百分位组由两个变量组成
【发布时间】:2018-08-24 22:20:44
【问题描述】:

我有一个 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

【问题讨论】:

  • 到目前为止你尝试了什么?

标签: hive hiveql


【解决方案1】:

使用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])

返回组中数值列(包括浮点类型)的近似第 p 个百分位数。 B 参数以内存为代价控制近似精度。较高的值会产生更好的近似值,默认值为 10,000。当 col 中不同值的数量小于 B 时,这将给出一个精确的百分位值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多