2014-12-04 73 views
0

我無法找到一種通過Hive中的有效查詢來實現以下功能的方法。意向是根據加權平均得到一年內發佈的最受好評的電影。在配置單元的select子句中的子查詢

要更清楚這是我應該能夠在單個查詢配置單元中執行的操作。

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

選擇movieid,AVG(等級),計數(movieid),AVG(等級)/ allMoviesRated從 加權(選擇movieid,等級,年(FROM_UNIXTIME(unixtime)),如從u_data年其中u_data_new.year = 1997 )由加權desc限制10的movieid順序組成的u_data_new組;

+0

我一直在使用加入做到了。可能是一個昂貴的操作,但它的工作。 – Tejes 2014-12-05 01:47:13

回答

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; 
+0

感謝您的努力。 – Tejes 2014-12-05 01:50:37