使用具有布隆过滤器的ORC:
CREATE TABLE employee (
employee_id bigint,
name STRING
) STORED AS ORC
TBLPROPERTIES ("orc.bloom.filter.columns"="employee_id")
;
启用PPD与向量化,使用CBO和Tez:
SET hive.optimize.ppd=true
SET hive.optimize.ppd.storage=true
SET hive.vectorized.execution.enabled=true
SET hive.vectorized.execution.reduce.enabled = true
SET hive.cbo.enable=true
set hive.stats.autogather=true
set hive.compute.query.using.stats=true
set hive.stats.fetch.partition.stats=true
set hive.execution.engine=tez
set hive.stats.fetch.column.stats=true
set hive.map.aggr=true
SET hive.tez.auto.reducer.parallelism=true
参考:https://community.cloudera.com/t5/Community-Articles/Optimizing-Hive-queries-for-ORC-formatted-tables/ta-p/248164
本文将介绍如何优化Hive查询ORC格式的表。ORC是一种高效的列式存储格式,可减少数据I/O并提高查询性能。以下是一些优化技巧:
1. 使用分区和桶:使用分区和桶可以减少查询数据量,提高查询速度。
2. 避免使用SELECT *:只选择需要的列,避免不必要的数据读取。
3. 使用压缩:使用压缩可以减少磁盘空间和网络带宽的使用,并提高查询性能。
4. 调整ORC文件大小:根据查询模式和硬件资源调整ORC文件大小,以达到最佳查询性能。
5. 使用向量化查询:启用向量化查询可以进一步提高查询性能。
通过实施这些优化技巧,您可以显著提高Hive查询ORC格式表的性能。
Tune proper parallelism on mappers and reducers:
--example for mappers:
set tez.grouping.max-size=67108864;
set tez.grouping.min-size=32000000;
--example settings for reducers:
set hive.exec.reducers.bytes.per.reducer=67108864
更改这些数字以实现最佳性能。