20

当我VirtualBox Sandbox使用 hive 运行查询时。我觉得Select count(*)比.js慢太多了Select *

谁能解释背后发生了什么?

为什么会发生这种延迟?

4

3 回答 3

13
select * from table

它可以是一个只有地图的工作但是

Select Count(*) from table 

它可以是 Map 和 Reduce 工作

希望这可以帮助。

于 2013-06-12T10:12:24.537 回答
4

Hive 查询可以执行三种类型的操作。

按照最便宜和最快到更昂贵和更慢的顺序,它们在这里。

配置单元查询可以是仅元数据请求。

显示表、描述表是示例。在这些查询中,hive 进程在元数据服务器中执行查找。元数据服务器是一个 SQL 数据库,可能是 MySQL,但实际的数据库是可配置的。

蜂巢查询可以是 hdfs 获取请求。从表中选择 * 就是一个例子。在这种情况下,hive 可以通过执行 hdfs 操作来返回结果。hadoop fs -get,或多或少。

Hive 查询可以是 Map Reduce 作业。

Hive 必须将 jar 运送到 hdfs,jobtracker 将任务排队,tasktracker 执行任务,最终数据放入 hdfs 或运送到客户端。

Map Reduce 作业也有不同的可能性。

它可以是地图唯一的工作。Select * from table where id > 100 ,例如,所有这些逻辑都可以应用于映射器。

可以是 Map 和 Reduce 作业,从 table 中选择 min(id);Select * from table order by id ;

它也可以导致多次map Reduce pass,但我认为上面总结了一些行为。

于 2013-12-06T10:38:18.170 回答
3

这是因为数据库使用聚集的主键,因此查询单独搜索每一行的键,逐行搜索,而不是从索引中搜索。

  • 运行optimize table。这将确保数据页按排序顺序物理存储。可以想象,这可以加快对集群主键的范围扫描。

  • 仅在 change_event_id 列上创建一个额外的非主索引。这将在索引页中存储该列的副本,这样扫描速度会更快。创建后,检查解释计划以确保它正在使用新索引

于 2013-06-12T08:13:51.730 回答