我在Hive里有一个表,我想从中获取所有数据。问题是:
select * from tbl;
给我的结果与:
select count(*) from tbl;
为什么?第二个查询似乎运行hadoop map reduce,第一个查询则不运行—它只是返回结果。该表没有分区或嵌套,而是采用文本(csv)格式。
tvmytwxo1#
提交配置单元查询时,配置单元会将查询转换为一个或多个阶段。阶段可以是mapreduce阶段、采样阶段、合并阶段、限制阶段,也可以是hive需要执行的其他可能任务。 select * from table_name; 这个查询只是扫描整个表并在屏幕上转储输出,因此您可以在控制台上看到不同的日志输出。而 select count(*) from table_name 只需扫描Hive元信息,并把他们自己的结果。它也不运行任何mapreduce作业。您可以在配置单元控制台上运行下面的命令,您将能够看到整个信息。 hive> describe formatted table_name ;表参数:
select * from table_name;
select count(*) from table_name
hive> describe formatted table_name
COLUMN_STATS_ACCURATE true numFiles xx numRows xxxxxxxx
在hadoop中,聚合/条件/算术操作等需要一个处理引擎来处理和执行结果,因此每当您提交这种类型的作业时,它就会在内部被转换成mapreduce程序,mapreduce程序代表查询执行,并将其结果生成到配置单元和在屏幕上显示的配置单元,因此您将看到不同的结果。你可以把 EXPLAIN 关键字前面的查询可以看到查询计划等信息。请参考hadoop编程手册第10章,了解更多关于hive的使用 EXPLAIN 特征。
EXPLAIN
1条答案
按热度按时间tvmytwxo1#
提交配置单元查询时,配置单元会将查询转换为一个或多个阶段。阶段可以是mapreduce阶段、采样阶段、合并阶段、限制阶段,也可以是hive需要执行的其他可能任务。
select * from table_name;
这个查询只是扫描整个表并在屏幕上转储输出,因此您可以在控制台上看到不同的日志输出。而
select count(*) from table_name
只需扫描Hive元信息,并把他们自己的结果。它也不运行任何mapreduce作业。您可以在配置单元控制台上运行下面的命令,您将能够看到整个信息。
hive> describe formatted table_name
;表参数:
在hadoop中,聚合/条件/算术操作等需要一个处理引擎来处理和执行结果,因此每当您提交这种类型的作业时,它就会在内部被转换成mapreduce程序,mapreduce程序代表查询执行,并将其结果生成到配置单元和在屏幕上显示的配置单元,因此您将看到不同的结果。
你可以把
EXPLAIN
关键字前面的查询可以看到查询计划等信息。请参考hadoop编程手册第10章,了解更多关于hive的使用
EXPLAIN
特征。