问题描述
是否可以从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;