在Hive中创建十分位数

时间:2014-05-31 15:39:56

标签: hive

我是Hive的第一次用户(过去2年一直致力于SQL和Teradata)。我正在尝试将列添加到包含

的表中
  1. ID,2。分数
  2. 第3列将是得分的十分位数,值为1到10.在Teradata中,我使用了分位数(10,得分)补丁,Hive中是否有任何等效的补丁?谷歌没有给我任何相关的答案,任何帮助都非常感谢!

2 个答案:

答案 0 :(得分:4)

从Hive 0.11.0开始,您可以使用NTILE。要创建十分位数,我在下面的示例中使用了ntile(10):

select
id, score,
ntile(10) over (order by score)
from your_table_name

另请参阅:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+WindowingAndAnalytics

答案 1 :(得分:1)

所以这是一种破解,但肯定可以使用Hive的percentile UDF来完成。

select
id,
score,
if(score <= perc[0], 1,
if(score <= perc[1], 2,
if(score <= perc[2], 3,
if(score <= perc[3], 4,
if(score <= perc[4], 5,
if(score <= perc[5], 6,
if(score <= perc[6], 7,
if(score <= perc[7], 8,
if(score <= perc[8], 9,
                     10))))))))) as quantile
from my_table a
join (
  select percentile(score, array(0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9)) as perc
  from my_table
) b