Hive是否支持Select in Select?

时间:2014-02-27 05:13:45

标签: sql hadoop hql hive

Hive中的代码是否可能,有些变化?:

insert into table webmap
select a.res reference, b.res resource, 
(select count(ip) from weblog where resource=a.res and referer=b.res) weight
from toprefres a join toprefres b;

我在hive-0.10.0-cdh4.5.0中运行它并得到错误: FAILED:ParseException第3:1行无法识别'select''count''附近的输入(''在表达式规范中

如果支持在Hive中选择select,该怎么办?

我终于找到了答案:

insert into table webmap
select refres.reso,refres.refe, count(ip) weight from 
weblog join (select a.res refe, b.res reso from toprefres a join toprefres b) refres on
trimrslash(weblog.resource)=refres.reso and trimrslash(weblog.referrer)=concat("http://dongxicheng.org",refres.refe)
group by refres.reso,refres.refe;

这完全符合我的需要!

1 个答案:

答案 0 :(得分:0)

据我所知,Hive不支持此类核心子查询。我从以下帖子中确认了我的想法:

Hive column as a subquery select

但我认为,您可以修改您的查询以实现您想要获得的内容:

insert into table webmap
select a.res reference, b.res resource, 
count(weblog.ip) weight
from toprefres a 
join toprefres b
join weblog ON weblog.resource=a.res 
and weblog.referer=b.res;

另请注意,您的ON子句中没有可能导致交叉连接创建笛卡尔积并花费更多时间。如果可能的话,尝试优化它。