Hadoop 我们可以在查询之前对配置单元表的列进行排序吗?

Hadoop 我们可以在查询之前对配置单元表的列进行排序吗?,hadoop,hive,Hadoop,Hive,我的配置单元表是ORC格式的,当where子句中的列被排序时,其中的查询运行得最快。但就我而言,目前还没有。在查询之前对列进行排序的语法是什么。如果我正确理解您的问题,您有一个未排序的ORC表。您希望查询该表,但希望在查询之前对数据进行排序!这没有任何意义,因为您将触发一些查询来对数据进行排序,然后再触发另一个查询 排序可能是一项代价高昂的操作,具体取决于您如何实现它。但是,在查询数据时,您还可以使用一些其他选项来加快查询速度。下面是一些细节 使用Tez执行引擎。这比Hive推出的传统MR-jo

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

如果我正确理解您的问题,您有一个未排序的ORC表。您希望查询该表,但希望在查询之前对数据进行排序!这没有任何意义,因为您将触发一些查询来对数据进行排序,然后再触发另一个查询

排序可能是一项代价高昂的操作,具体取决于您如何实现它。但是,在查询数据时,您还可以使用一些其他选项来加快查询速度。下面是一些细节

使用Tez执行引擎。这比Hive推出的传统MR-jobs要快得多。 启用谓词下推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;
从元数据库中获取的分区和列统计信息。小心使用。如果分区和/或列太多,可能会降低性能

控制减速器输出:

SET hive.tez.auto.reducer.parallelism=true;

SET hive.tez.max.partition.factor=20;

SET hive.exec.reducers.bytes.per.reducer=128000000;
此外,您可能希望了解创建ORC表的最佳实践,以便能够在最短的时间内实现查询的最大化

希望有帮助