Hiveql 带配置单元的select子句中的子查询
我无法找到一种方法,通过配置单元中的有效查询来实现以下功能。目的是根据加权平均数,在一年内发行一部最受欢迎的电影 更清楚地说,这是我应该能够在配置单元中在单个查询中执行的操作 var allMoviesRated=选择countmovieid,其中yearfrom_unixtimeunixtime=1997 选择电影ID、avgrating、countmovieid、avgrating/所有电影分级为加权自Hiveql 带配置单元的select子句中的子查询,hiveql,Hiveql,我无法找到一种方法,通过配置单元中的有效查询来实现以下功能。目的是根据加权平均数,在一年内发行一部最受欢迎的电影 更清楚地说,这是我应该能够在配置单元中在单个查询中执行的操作 var allMoviesRated=选择countmovieid,其中yearfrom_unixtimeunixtime=1997 选择电影ID、avgrating、countmovieid、avgrating/所有电影分级为加权自 选择movieid,rating,yearfrom_unixtimeunixtime作为
选择movieid,rating,yearfrom_unixtimeunixtime作为来自u_数据的年份,其中u_data_new.year=1997 u_data_new group by movieid order by weighted desc limit 10 遗憾的是。。我不认为有一种方法可以在单个查询中使用子查询来获得所有电影的评级计数 您可能需要编写一个脚本来执行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--------
排名_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;
我已经用join完成了。这可能是一个昂贵的手术,但它很有效。感谢乌尔维什的努力。