HIVE:“ SELECT * from”上的“ LIMIT”如何在后台运行?

Ale*_*apu 3 memory hadoop hive limit

只是想知道Limit对于下面的简单查询如何工作

select * from T limit 100
Run Code Online (Sandbox Code Playgroud)

想象表T有1300万条记录

上面的查询是否:
1.首先将全部1300万个加载到内存中,并在结果集中仅显示100条记录?
2.仅加载100并给出100条记录的结果集

现在已经搜索了很长时间,大多数页面只谈论使用“ LIMIT”,而不是Hive如何处理它。

任何有用的回应表示赞赏。

rby*_*oor 5

如果未应用优化程序,则配置单元最终将扫描整个表。但是Hive使用HIVE-2925的一部分发布的hive.fetch.task.conversion对此进行了优化,以简化具有简单条件的简单查询并且完全不运行MR / Tez。

支持的值是无,最小值和更多。

none:禁用hive.fetch.task.conversion(Hive 0.14.0中带有HIVE-8389的值)

minimum:SELECT *,分区列(WHERE和HAVING子句)上的FILTER,仅LIMIT

更多:仅SELECT,FILTER,LIMIT(包括TABLESAMPLE,虚拟列)

您的问题更有可能是在设置最小或更多时发生了什么。它只是扫描添加的文件并读取行,直到达到minimumRows()。有关更多信息,请参考gitCodeConfig以及此处