我们可以在查询之前对Hive表的列进行排序吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我们可以在查询之前对Hive表的列进行排序吗?相关的知识,希望对你有一定的参考价值。
我的Hive表是ORC格式,当where子句中的列被排序时,其中的查询运行得最快。但就我而言,目前还没有。在查询之前对列进行排序的语法是什么。
答案
如果我理解你的问题,你有一个未分类的ORC表。并且您想要查询该表但希望在“查询之前”对数据进行“排序”!这没有任何意义,因为您将触发一些“查询”以使排序数据在其上触发另一个查询。
根据您的实施方式,排序可能是一项代价高昂的操作。但是,在查询可以加快查询速度的数据时,您可以使用许多其他选项。遵循一些细节。
- 使用Tez执行引擎。它比Hive推出的传统MR工作更快。
- 启用谓词下推(PPD)以在存储层进行过滤:
SET hive.optimize.ppd=true; SET hive.optimize.ppd.storage=true
- 矢量化查询执行以1024行而不是逐行处理数据:
SET hive.vectorized.execution.enabled=true; SET hive.vectorized.execution.reduce.enabled=true;
- 启用基于成本的优化程序(COB),以便根据成本和获取表统计信息执行高效的查询:
SET hive.cbo.enable=true; SET hive.compute.query.using.stats=true; SET hive.stats.fetch.column.stats=true; SET hive.stats.fetch.partition.stats=true;
- 从metastsore获取的分区和列统计信息。请谨慎使用。如果您有太多分区和/或列,这可能会降低性能。
- 控制减速机输出:
SET hive.tez.auto.reducer.parallelism=true; SET hive.tez.max.partition.factor=20; SET hive.exec.reducers.bytes.per.reducer=128000000;
此外,您可能希望查看创建ORC表的最佳实践,mentioned here,以便您可以在最短的时间内获得最大的查询!
希望有所帮助!
以上是关于我们可以在查询之前对Hive表的列进行排序吗?的主要内容,如果未能解决你的问题,请参考以下文章