我们可以在查询之前对Hive表的列进行排序吗?

时间:2018-03-05 04:27:16

标签: hadoop hive

我的Hive表是ORC格式,当where子句中的列被排序时,其中的查询运行得最快。但就我而言,目前还没有。在查询之前对列进行排序的语法是什么。

1 个答案:

答案 0 :(得分:1)

如果我理解你的问题,你有一个未分类的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,以便您可以在最短的时间内获得最多的查询!

希望有所帮助!