为什么下面的查询要花很长时间才能完成,而如果单独查询的话,几秒钟内就会返回?
select count(*),count(distinct a), count(distinct b) from test.tablename;
然而,如果查询下面两个查询中的任何一个,它都会以秒为单位返回,例如:
select count(*),count(distinct a) from test.tablename;
或者
select count(*),count(distinct b) from test.tablename;
hive的配置大部分都是优化的。
更新:抱歉。错过了问题中的数。
2条答案
按热度按时间0lvr5msh1#
如果你没有太大的计数(太大的数组会导致oom),可以采用另一种方法。
size(collect_set())
会给你一个明确的计数。zazmityj2#
我记得hive在实现 "count(distinct) "方面做得很差,是不是这样更快?
如果你的a和b的值相对较少,那么这可能也有不错的性能。
hive是一个并行数据库,但有些操作是在一个处理器上进行的。曾经,"count(distinct) "是这些操作之一。然而,这可能已经被修正了。......如果查询中只有一个
count(distinct)
,那么多个这样的表达式可能需要将所有的数据发送到一个单一的节点上进行处理--这是一个真正的性能杀手。