Hive中text格式和orc格式表的索引性能相关总结
Hive中text格式和orc格式表的索引性能相关总结
text表索引的使用:
建表:
create table aa (O_ORDERKEY int, O_CUSTKEY int, O_ORDERSTATUS string, O_TOTALPRICE string, O_ORDERDATE string, O_ORDERPRIORITY string, O_CLERK string, O_SHIPPRIORITY int, O_COMMENT string)
row format delimited fields terminated by ‘|’ stored as textfile;
导数据(2100万条):
swhdfs dfs -put aa.txt /user/hive/warehouse/aa
创建索引表:
create index idx on table aa(O_ORDERKEY) as ‘org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler’ with deferred rebuild in table aa_tmp;
导数据到索引表:
alter index idx on aa rebuild;
生效索引需要设置的参数:
SET hive.fetch.task.conversion=minimal;
SET hive.optimize.index.filter.compact.minsize=0;
SET hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat;
SET hive.optimize.index.filter=true;
text表有无索引性能对比:
通过hive client 查询不走索引:
通过hive client查询走索引:
通过我们数据查询
从以上测试结果可以看出text格式的hive表索引可以起到优化效果但只是针对从hive client端发起的查询,对于从我们数据库发起的查询却没有优化效果,原因是我们的数据库访问hive表是绕过hive直接读取hdfs数据文件,并且会扫描全部的数据所以较慢。
orc表索引的使用:
1,表上有索引的前提下,通过hive client访问orc表需要设置参数 hive.optimize.index.filter=true才会走到索引;
2,表上有索引的前提下,通过我们数据库访问orc表不需要设置参数也可以走到索引;
orc表有无索引性能对比:
(表结构相同,表数据量相同都为1亿2000万条记录,查询条件相同)
建表语句:
1,先建一张text格式的数据源表orders_textfile_bigbig 并导入测试数据
2,带索引的orc格式表:create table orc_with_index_b stored AS ORC TBLPROPERTIES(‘orc.create.index’=‘true’) as select * from orders_textfile_bigbig DISTRIBUTE BY o_orderkey sort BY o_orderkey; (数据入库时最好排序,后面有解释原因)
3,不带索引的orc格式表:create table orc_with_no_index_b2 stored AS ORC TBLPROPERTIES(‘orc.create.index’=‘false’) as select * from orders_textfile_bigbig DISTRIBUTE BY o_orderkey sort BY o_orderkey;
表中数据量:
通过hive client查询 带索引的orc表:
SET hive.optimize.index.filter=true;
select * from orc_with_index_b where o_orderkey = 100;
通过hive client 查询不带索引的orc表:
select * from orc_with_no_index_b2 where o_orderkey = 100;
通过我们数据库查询带索引的orc表:
select * from orc_with_index_b where o_orderkey = 100;
通过我们的数据库查询不带索引的orc表:
select * from orc_with_no_index_b2 where o_orderkey = 100;
orc表索引机制(核心思想是尽可能的少扫文件少读数据,得到正确的查询结果):
1,orc压缩格式的表默认会在建表时自动在表的每一个列上建轻量级索引,如果建表时不想带索引设置参数’orc.create.index’='false’即可,如下建表语句
create table orc_with_index_b stored AS ORC TBLPROPERTIES(‘orc.create.index’=‘true’) as select * from orders_textfile_bigbig DISTRIBUTE BY o_orderkey sort BY o_orderkey;
建表时最好将数据有序的入库,因为排完序的数据在存表时,每一个orcFile切分出来stripe会更细更多而且会按照排序字段从小到大的规则来切分,使用排序字段作为过滤条件时可以更快速的
过滤掉无用的stripe,只扫描满足条件的stripe,从而提高查询性能。(从上面的测试结果图中可以看出走索引时只扫了28万条数据,不走索引时扫了全部的1亿2千万条数据)
2,orc表建上索引之后会发生以下几点的变化:
a) 在每一个orcFile中生成文件统计信息(File Statistics),详细信息可以看下面的图,包括每一列的 hasNull,Min,Max,Sum等信息;
b) 在每一个orcFile中生成各自所拥有的所有stripe的统计信息(Stripe Statistics)c) 在每一个orcFile中的每一个stripe下生成RowRroup统计信息(RowIndex);
3,orc索引分级工作原理:
a) 一级索引: 例如查询过滤条件为where o_orderkey = 100;在读去orcFile文件时先从File Statistics中查看o_orderkey 字段的min和max是否包含100,如果包含继续二级索引搜索,如果不包含直接跳过该文件;
b)二级索引: 搜索当前orcFile中的Stripe Statistics中包含的每一个stripe的o_orderkey 字段的min和max,同样如果包含继续三级索引搜索,不包含直接跳过该stripe;
c)三级索引: 在满足条件的stripe中拿到o_orderkey字段的RowIndex信息最后查出满足条件的记录。
4,我们数据库查询orc表调用的是hive提供的orc文件专业扫描器OrcFileVectorReader接口,可以读取orcFile中的offset和length达到orc索引切分orcFile的效果过滤掉无用数据。
注意事项:
1,通过我们数据库查询hive时,支持orc压缩格式的表走索引,不支持text压缩格式的表走索引;
2,建orc表时需要按照查询字段排序,排完序会有明显性能的提升;
3,text和orc索引的性能都需要表中数据量比较大时,才会有明显的感受;
4,text表索引不会自动维护每次新增或者删除数据,需要手动rebuild索引表数据;
5,text表索引列不能建在值离散的列上,否则即使走到索引优化效果也不明显,应该尽可能的选取UEC值低的列为索引列。
Hive中text格式和orc格式表的索引性能相关总结相关推荐
- 关于Hive中的存储格式及压缩格式详解
最近面试,遇到了关于Hive的数据存储格式的问题,回答不尽人意,抽时间总结多看看关于Hive存储格式和压缩格式的内容. Hive底层数据是以HDFS文件的形式存储在Hadoop中的,选择一个合适的文件 ...
- date类型_06076.1.0如何将ORC格式且使用了DATE类型的Hive表转为Parquet表
温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图. Fayson的github: https://github.com/fayson/cdhproject 提示 ...
- 【Hive】Hive查询报错 Malformed ORC file、Invalid postscript、serious problem
报错1: [2020-09-01 20:27:48] hive:Failed with exception java.io.IOException:java.lang.RuntimeException ...
- hive中NULL值问题
问题描述 源端数据oracle数据库,通过cdm迁移工具将数据迁移到目标端hive.在oracle中的NULL值迁移到hive中后有的字段表现为NULL,有的字段表现为空串""(即 ...
- 详解:Hive中的NULL的处理、优点、使用情况(注意)
Hive中的NULL的处理.优点.使用情况 一:Hive中的NULL hive的使用中不可避免的需要对null.''(空字符串)进行判断识别.但是hive又别于传统的数据库. 1.不同数据类型对空值的 ...
- hive 中某个字段等于0_快速了解hive
作者丨HappyMint 文章选摘:大数据与人工智能 这是作者的第7篇文章 本文主要针对从事大数据分析和架构相关工作,需要与hive打交道但目前对hive还没有进行深层次了解的小伙伴,希望本文会让你对 ...
- Hive 中 formatted 的使用
hive 中 formatted 的用法: select * from 表名: 查询该表名的所有字段记录 desc formatted 表名: 查看该表的结构化数据,但并不列出表中的数据 示例: 创建 ...
- 【hive-3.1.3】ORC 格式的表和 text 格式的表,当分区的字段数量和表的字段数量不一致,检索结果不相同
ORC 格式的表,和 text 格式的表,如果分区的字段数量和表的字段数量不一致,则 select 的结果不一致. 1. 测试内容 1.1 ORC 格式的表 CREATE EXTERNAL TABLE ...
- hdfs orc格式_hive中orc格式表的数据导入
Hive系列文章 hive创建orc格式表不能像textfile格式一样直接load数据到表中,需要创建临时textfile表,然后通过insert into 或者insert overwrite到o ...
最新文章
- python 将YOLO(txt)格式的标注数据批量转换为PascalVOC(XML)格式的标注数据
- php入门05-会话控制(session与cookie)
- android getdecorview 出现空指针,android – 为什么我从TabWidget得到一个空指针异常?...
- HDU-神、上帝以及老天爷
- LOAM: Lidar Odometry and Mapping in Real-time
- 时间操作(Java版)—将毫秒转换为年月日时分秒
- java调用linux系统命令_java 调用linux系统命令
- android 大众点评,Android 大众点评的接入
- 北京邮电大学计算机考研拟录取名单,北京邮电大学研究生拟录取名单2021公示...
- word文件做一半未响应_Word经常出现未响应怎么办?
- 小伙长期熬夜加班致“斑秃” IT业人士最易脱发
- 计算机硬盘的参数错误,电脑提示移动硬盘参数错误的解决方法
- can总线程序讲解_详解CAN总线
- 谷歌R语言代码风格规定:
- 2022.12.5-12.11 AI行业周刊(第127期):一起做时间的朋友
- Vue实现百度地图并添加热力图(附源码)
- 工作时间如何安排:集中注意力的方法
- github 开源android项目
- 2018-8-10-WPF-使用-VisualStudio-2017-项目文件
- windows需要关闭的大量读写硬盘的服务