如果一个选择中有多个聚合列,是否只会评估一次?例如:
select
date,
count(userid) as uv,
sum(isclick) as clickcnt,
count(userid) / sum(isclick) as ctr
from
user_access_log
group by
1
这里count(userid)
和sum(isclick)
都使用了两次,它们会被评估两次还是只评估一次,hive会进行任何查询优化吗?
答案 0 :(得分:0)
评论太长了。
它没有任何区别。运行聚合查询的费用几乎完全是将组的行放在一起。在大多数情况下,聚合本身并不昂贵。
唯一的例外是count(distinct)
(嗯,distinct
有任何形式)。这需要更多的开销。
如果您确实只想运行一次聚合,可以使用子查询:
select ual.*, (uv / clickcnt) as ctr
from (select date, count(userid) as uv, sum(isclick) as clickcnt,
from user_access_log
group by 1
) ual;
说实话,我怀疑你确实想要count(distinct userid)
,所以这可能会带来一点性能提升。