我的Hive表是ORC格式,当where子句中的列被排序时,其中的查询运行得最快。但就我而言,目前还没有。在查询之前对列进行排序的语法是什么。
答案 0 :(得分:1)
如果我理解你的问题,你有一个未分类的ORC表。并且您想要查询该表但希望在“查询之前”对数据进行“排序”!这没有任何意义,因为您将触发一些“查询”以排序数据以触发其上的另一个查询。
排序可能是一项代价高昂的操作,具体取决于您的实施方式。但是,在查询可以加快查询速度的数据时,您可以使用许多其他选项。遵循一些细节。
启用谓词下推(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,以便您可以在最短的时间内获得最多的查询!
希望有所帮助!