Hive优化—ORC文件格式
一. 基于index优化
1. row group index
简介:ORC文件中每一个 Stripe 会分成多个 row group , 并保存每个 group 的统计信息,
- 配置orc.create.index = true 开启生成索引
- 配置orc.row.index.stride = 10000 设置每个 group 的行数
- 设置太小,会产生大量的统计信息数据,官方说明必须大于1000
配置以上两个参数,则在查询时,Hive会将where之后的约束传递给ORC reader,这些reader根据组级别的统计信息,过滤掉不必要的数据。
此种优化多用于数值型字段的查询,同时因为需要有效利用每个列的统计信息 max或min,如果想要最大化利用row group index,则需要对数值型字段进行排序。
2. bloom filter index
布隆过滤器简而言之就是一个判断是否存在的算法,若返回不存在,则肯定不存在,若返回存在,则大概率存在。因此可以用于跳过某些不包含需要查询的字段值的stripe,从而达到优化查询的目的。
- 配置参数 orc.bloom.filter.columns”=”col_name” 对名为col_name的字段设置开启布隆过滤器。
在查询的过程中,假使where col_name = ’a‘ ,则会通过布隆过滤器判断值 ’a‘是否被包含在该Stripe内,若返回不存在,则直接跳过该Stripe。