带有hive的select子句中的子查询

时间:2014-12-04 16:38:43

标签: hiveql

我无法通过Hive中的有效查询找到实现以下功能的方法。根据加权平均值,意图是获得一年内发布的最高评分电影。

更清楚这是我在单个查询中可以在配置单元中执行的操作。

var allMoviesRated = select count(movieid)其中year(from_unixtime(unixtime))= 1997;

选择movieid,avg(评级),count(movieid),平均(评级)/ allMoviesRated为加权 (选择movieid,rating,year(from_unixtime(unixtime))作为u_data的年份,其中u_data_new.year = 1997)u_data_new按movieid顺序分组加权desc limit 10;

1 个答案:

答案 0 :(得分:0)

遗憾的是......我认为在单个查询中有一种方法可以使用子查询来计算所有评级的电影。

您可以编写执行2个查询的脚本 第一个查询一个获取allMoviesRated并存储在脚本变量中。 第二个查询是您使用hiveconf传递此值的排名查询

因此,您的脚本可能看起来像

your script.bash or python------------start--------
var allMoviesRated  = os.cmd (hive -S "use db; select count(distinct movieid);")
ranking = os.cmd ( hive -S -hiveconf NUM_MOVIES = allMoviesRated -f ranking_query.hql)  
your script.bash or python------------end--------

ranking_query.hql:

select movieid, avg(rating), count(movieid), avg(rating)/${hiveconf:NUM_MOVIES }as weighted 
from (
    select movieid, rating, year(from_unixtime(unixtime)) as year 
    from u_data where u_data_new.year = 1997) u_data_new 
group by movieid order by weighted desc limit 10;