只是想知道limit如何处理下面的简单查询
select * from T limit 100
假设表t有1300万条记录以上查询是否会:1首先将1300万条记录全部装入内存,结果集中只显示100条记录?2只加载100条&给出100条记录的结果集我们已经搜索了很长一段时间了,大多数页面只讨论如何使用“限制”,而不是hive如何在引擎盖下处理它。任何有用的回应都将不胜感激。
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
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/
2条答案
按热度按时间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
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/