gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 16:37:29 25 4
gpt4 key购买 nike

我的 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 中获取的分区和列统计信息。请谨慎使用。如果您有太多分区和/或列,这可能会降低性能。

  • 控制reducer输出:

    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 , 让您可以在最短的时间内获得最多的查询!

希望对您有所帮助!

关于hadoop - 我们可以在查询之前对 Hive 表的列进行排序吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49103485/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com