hive:如何限制select*from在引擎盖下工作?

fjaof16o  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(376)

只是想知道limit如何处理下面的简单查询

select * from T limit 100

假设表t有1300万条记录
以上查询是否会:
1首先将1300万条记录全部装入内存,结果集中只显示100条记录?
2只加载100条&给出100条记录的结果集
我们已经搜索了很长一段时间了,大多数页面只讨论如何使用“限制”,而不是hive如何在引擎盖下处理它。
任何有用的回应都将不胜感激。

2ul0zpep

2ul0zpep1#

如果没有应用优化器,配置单元将扫描整个表。但是hive通过hive-2925中发布的hive.fetch.task.conversion对此进行了优化,以简化带有简单条件的简单查询,并且根本不运行mr/tez。
支持的值为none、minimal和more。
无:禁用hive.fetch.task.conversion(使用hive-8389在hive 0.14.0中添加的值)
minimal:select*,对分区列进行筛选(where和having子句),仅限
更多:仅选择、筛选、限制(包括表示例、虚拟列)
你的问题很可能是当设置了最小值或更多值时会发生什么。它只是扫描添加的文件并读取行,直到到达leastrows()以获取更多信息,请参阅gitcode、config和here

pkwftd7m

pkwftd7m2#

在引擎盖下,配置单元中的“select”发出一个fetch任务,而不是spawing一个mapreduce任务。把它想象成一个hadoop fs-get,这里要注意的一点是fetch任务只在select*上工作,如果要选择一个列,fetch可能不工作。
资料来源:https://vcfvct.wordpress.com/2016/02/18/make-hive-query-faster-with-fetch-task/

相关问题