HIVE:为什么Hive会在tablename Vs的select列上生成mapreduce作业,而不会为select * from tablename生成mapreduce?

时间:2014-09-24 04:37:16

标签: hive

为什么Hive会在tablename Vs的select列上生成mapreduce作业,而不会为select * from tablename生成mapreduce?

2 个答案:

答案 0 :(得分:3)

当执行这样的简单语句select * from tablename时,hive所做的只是从存储在hdfs中的文件中获取数据,并以列式输出格式将其引出。基本上它会生成类似

的语句
hadoop fs -cat hdfs://schemaname/tablename.txt
hadoop fs -cat hdfs://schemaname/tablename.rc
hadoop fs -cat hdfs://schemaname/tablename.orc

或者以您的表格文件的任何格式存储。

如果您尝试选择一个列或在查询中添加where子句或使用表中的任何聚合,MR会出于显而易见的原因而出现。

答案 1 :(得分:0)

无论何时运行普通'选择*',都会创建一个获取任务,而不是mapreduce任务,它只是按原样转储数据而不对其执行任何操作。然而,无论何时执行“选择列”,地图作业都会在内部选择该特定列并提供输出。

还有一个错误提交,以便选择列#39;查询运行没有mapreduce。请在此处查看详细信息:https://issues.apache.org/jira/browse/HIVE-887