我是Hive的第一次用户(过去2年一直致力于SQL和Teradata)。我正在尝试将列添加到包含
的表中第3列将是得分的十分位数,值为1到10.在Teradata中,我使用了分位数(10,得分)补丁,Hive中是否有任何等效的补丁?谷歌没有给我任何相关的答案,任何帮助都非常感谢!
答案 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