只是想知道如何限制以下简单查询的工作
{{1}}
想象一下,表T有1300万条记录
请问以上查询:
1.首先将所有1300万载入内存和结果集中只显示100条记录?
2.仅加载100&给出100条记录的结果集
现在正在搜索它已经有一段时间了,大多数页面只讨论使用" LIMIT"但不是Hive如何在引擎盖下处理它。
任何有用的回应表示赞赏。
答案 0 :(得分:4)
如果未应用优化程序,则hive最终扫描整个表。但是Hive优化了 将此作为HIVE-2925的一部分发布的 hive.fetch.task.conversion 简化条件下的简单查询,而不是运行MR / Tez 所有
支持的值为none,minimal和more。
无:禁用hive.fetch.task.conversion(使用HIVE-8389在Hive 0.14.0中添加的值)
最小:SELECT *,分区列上的FILTER(WHERE和HAVING子句),仅限LIMIT
更多:仅限SELECT,FILTER,LIMIT(包括TABLESAMPLE,虚拟列)
您的问题更可能发生在设置最小值或更多值时会发生什么。 它只扫描添加的文件并读取行直到达到 leastRows()有关详情,请参阅gitCode,Config和here
答案 1 :(得分:0)
在引擎盖下,hive中的“SELECT”发出FETCH任务而不是生成mapreduce任务。把它想象成一个 hadoop fs -get这里要注意的是FETCH任务只能工作 SELECT *如果您要选择列提取可能不起作用。
来源:https://vcfvct.wordpress.com/2016/02/18/make-hive-query-faster-with-fetch-task/