HIVE:' LIMIT' on' SELECT * from'在引擎盖下工作?

时间:2017-09-25 17:57:01

标签: hadoop memory hive limit

只是想知道如何限制以下简单查询的工作

{{1}}

想象一下,表T有1300万条记录

请问以上查询:
1.首先将所有1300万载入内存和结果集中只显示100条记录?
2.仅加载100&给出100条记录的结果集

现在正在搜索它已经有一段时间了,大多数页面只讨论使用" LIMIT"但不是Hive如何在引擎盖下处理它。

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

2 个答案:

答案 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()有关详情,请参阅gitCodeConfighere

答案 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/