Hive中可能有多重读取概念吗?

问题描述

是否可以从Hive表中获取多个记录?例如:我在Hive /文件表中有1000条记录,由于性能限制,我不想连续1000次击中Hive /文件。 我知道此技术在DB2中可用,但在Hive中不确定。 要么 如果我们有更好的选择在有限的时间内访问数据库/文件获取Hive中的所有行,请告诉我。

解决方法

select * from table仅读取一次文件。可拆分的大文件将被拆分,映射器将读取它自己的文件部分。如果您运行的是1000个选择,而不是一个,则每个选择都会读取数据文件。

1000条记录不是很大的数据量,您可以使用仅获取任务来快速获取数据,而无需运行map-reduce。

set hive.fetch.task.conversion=more;
set hive.fetch.task.conversion.threshold=1073741824; --1G

另请参阅:Why is Fetch task in Hive works faster than Map-only task?

此外,如果您正在执行一些复杂的处理,并且由于限制而无法执行仅提取任务,那么多行提取与矢量化功能非常相似。

向量化允许Hive一起处理一批行 一次处理一行。每个批次通常是原始类型的数组。在整个列向量上执行操作,从而改善了指令流水线和缓存使用率。

 SET hive.vectorized.execution.enabled=true;
 SET hive.vectorized.execution.reduce.enabled=true;