当您提交 Hive 查询时,Hive 会将查询转换为一个或多个阶段。阶段可以是 MapReduce 阶段、采样阶段、合并阶段、限制阶段或 Hive 需要执行的其他可能任务。
select * from table_name;
此查询只是扫描整个表并将输出转储到屏幕上,因此您会在控制台上看到不同的日志输出。
而select count(*) from table_name 只是扫描 Hive 元信息并将结果从它们本身中取出。它也不运行任何 MapReduce 作业。
您可以在 Hive 控制台上运行以下命令,您将能够看到全部信息。
hive> describe formatted table_name;
表格参数:
COLUMN_STATS_ACCURATE true
numFiles xx
numRows xxxxxxxx
在 hadoop 中,聚合/条件/算术运算等需要一个处理引擎来处理和执行结果,因此无论何时提交此类作业,它都会在内部转换为 MapReduce 程序,MapReduce 程序代表执行查询并将其结果生成到 hive 和 Hive 显示在您的屏幕上,因此您会看到不同的结果。
可以在查询前面加上EXPLAIN关键字,查看查询计划等信息。
请参阅 Programming Hadoop Book,第 10 章以了解有关使用 Hive EXPLAIN 功能的更多信息。