聚合列的Hive查询优化在select语句中出现一次

时间:2017-01-19 08:18:30

标签: sql hadoop hive

如果一个选择中有多个聚合列,是否只会评估一次?例如:

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会进行任何查询优化吗?

1 个答案:

答案 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),所以这可能会带来一点性能提升。