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格式表的索引性能相关总结相关推荐

  1. 关于Hive中的存储格式及压缩格式详解

    最近面试,遇到了关于Hive的数据存储格式的问题,回答不尽人意,抽时间总结多看看关于Hive存储格式和压缩格式的内容. Hive底层数据是以HDFS文件的形式存储在Hadoop中的,选择一个合适的文件 ...

  2. date类型_06076.1.0如何将ORC格式且使用了DATE类型的Hive表转为Parquet表

    温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图. Fayson的github: https://github.com/fayson/cdhproject 提示 ...

  3. 【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 ...

  4. hive中NULL值问题

    问题描述 源端数据oracle数据库,通过cdm迁移工具将数据迁移到目标端hive.在oracle中的NULL值迁移到hive中后有的字段表现为NULL,有的字段表现为空串""(即 ...

  5. 详解:Hive中的NULL的处理、优点、使用情况(注意)

    Hive中的NULL的处理.优点.使用情况 一:Hive中的NULL hive的使用中不可避免的需要对null.''(空字符串)进行判断识别.但是hive又别于传统的数据库. 1.不同数据类型对空值的 ...

  6. hive 中某个字段等于0_快速了解hive

    作者丨HappyMint 文章选摘:大数据与人工智能 这是作者的第7篇文章 本文主要针对从事大数据分析和架构相关工作,需要与hive打交道但目前对hive还没有进行深层次了解的小伙伴,希望本文会让你对 ...

  7. Hive 中 formatted 的使用

    hive 中 formatted 的用法: select * from 表名: 查询该表名的所有字段记录 desc formatted 表名: 查看该表的结构化数据,但并不列出表中的数据 示例: 创建 ...

  8. 【hive-3.1.3】ORC 格式的表和 text 格式的表,当分区的字段数量和表的字段数量不一致,检索结果不相同

    ORC 格式的表,和 text 格式的表,如果分区的字段数量和表的字段数量不一致,则 select 的结果不一致. 1. 测试内容 1.1 ORC 格式的表 CREATE EXTERNAL TABLE ...

  9. hdfs orc格式_hive中orc格式表的数据导入

    Hive系列文章 hive创建orc格式表不能像textfile格式一样直接load数据到表中,需要创建临时textfile表,然后通过insert into 或者insert overwrite到o ...

最新文章

  1. python 将YOLO(txt)格式的标注数据批量转换为PascalVOC(XML)格式的标注数据
  2. php入门05-会话控制(session与cookie)
  3. android getdecorview 出现空指针,android – 为什么我从TabWidget得到一个空指针异常?...
  4. HDU-神、上帝以及老天爷
  5. LOAM: Lidar Odometry and Mapping in Real-time
  6. 时间操作(Java版)—将毫秒转换为年月日时分秒
  7. java调用linux系统命令_java 调用linux系统命令
  8. android 大众点评,Android 大众点评的接入
  9. 北京邮电大学计算机考研拟录取名单,北京邮电大学研究生拟录取名单2021公示...
  10. word文件做一半未响应_Word经常出现未响应怎么办?
  11. 小伙长期熬夜加班致“斑秃” IT业人士最易脱发
  12. 计算机硬盘的参数错误,电脑提示移动硬盘参数错误的解决方法
  13. can总线程序讲解_详解CAN总线
  14. 谷歌R语言代码风格规定:
  15. 2022.12.5-12.11 AI行业周刊(第127期):一起做时间的朋友
  16. Vue实现百度地图并添加热力图(附源码)
  17. 工作时间如何安排:集中注意力的方法
  18. github 开源android项目
  19. 2018-8-10-WPF-使用-VisualStudio-2017-项目文件
  20. windows需要关闭的大量读写硬盘的服务

热门文章

  1. 十年测试老司机对软件测试前景的个人见解
  2. 主流WIFI加密方式
  3. 脾气差,其实就是自私
  4. nodemon 安装
  5. 一个集成阿里云、腾讯云、七牛云对象存储的SDK
  6. 别再问WiFi密码了,HMS Core统一扫码服务让手机一键联网
  7. SpringBoot整合Elasticsearch(一)
  8. 2021年电工(高级)考试及电工(高级)考试题库
  9. 2022电工(高级)操作证考试题库及模拟考试
  10. 网易新闻app自媒体号信息爬取