Hive编程和查询

时间:2014-12-15 10:06:22

标签: hive

当我们在hive

中简单地选择*查询时,为什么没有启动Mapreduce程序
select * from emp;
select * from emp limit 10;
select * from from limit 2;

对于上面的hive查询,没有启动mapreduce程序。

select id from emp;
select id,name from emp;
select * from emp where id>100;

对于上面的3个hive查询,map reduce程序会被启动。

为什么?有人可以解释一下

2 个答案:

答案 0 :(得分:2)

无论何时运行普通'选择*',都会创建一个获取任务,而不是mapreduce任务,它只是按原样转储数据而不对其执行任何操作。这等同于:

hadoop fs -cat $file_name

因此,在前三次查询的情况下,会调用一个获取任务,这只是做猫并显示数据。

对于其他查询,将调用一个map作业,根据您的条件过滤整行(例如,从所有列中选择id)并为您提供输出

答案 1 :(得分:0)

您可以在hive客户端中使用解释sql。 explain select * from tablename; The execution plan: STAGE PLANS: Stage: Stage-0 Fetch Operator limit: 10 Processor Tree: TableScan alias: tablename explain select dt from tablename; STAGE PLANS: Stage: Stage-1 Map Reduce Alias -> Map Operator Tree: src_f_log_user_leave TableScan alias: tablename 上面两个sql的区别首先是fetch运算符,另一个是Map运算符树。