最近在用一张8亿数据量表作为主表去关联一个千万量级的表时遇到一个问题,JOB运行的特别慢,而且大量的时间花费在了大表的查询上。如何解决这个问题,首先想到是不是由于数据偏移造成的,对应了各种数据偏移的场景,最后认定不是数据偏移造成的。那怎么办呢?后来想到用索引!由于对于索引不是特别了解,查了各种资料,这里做一个总结,加深对索引的理解。

HIVE中如何创建索引?

第一步

最最最重要的,是要先建表,并且对表的存储方式有要求(如果你所建的表本身是如下方式创建的,那么忽略这一步):

use dw_htldatadb;
drop table table;
create table table(
aa string comment 'asd',
bb int  comment 'asd'
) COMMENT 'table comment'
PARTITIONED BY(d STRING COMMENT 'date')
row format delimited fields terminated by ','
stored as textfile;

如果你按照下面这种方式建表,那么,你之后可能会遇到,再重建索引时,报错的情况(这里我真的不知道为啥子,只是在尝试过程中,发现了这个坑)

use dw_htldatadb;
drop table table;
create table table(
aa string comment 'asd',
bb int  comment 'asd'
) COMMENT 'table comment'
PARTITIONED BY(d STRING COMMENT 'date')
row format delimited fields terminated by ',' STORED AS ORC;

第二步

创建索引,这里注意的是,我在查资料时,看到有小伙伴用了分区创建索引的方法,但是我并没有试验成功,不知道是否和hive版本有关,所以,我用的是最常用的方式创建的索引。

成功版本:对表table的aa列创建索引

use database;
create index idx_table on table table(aa)
as 'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler'
with deferred rebuild
IN TABLE tablen_index;

未成功版本:

use database;
create index idx_table on table table(eid)
as 'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler'
with deferred rebuild
IN TABLE table_index
PARTITIONED BY (d,eid)
;

第三步

重建索引,这里,如果你的表已经有分区有数据,那么你可以对单个分区重建索引,也可以对整个表建立索引,但通过实践,是在表中未产生数据时,创建索引比较快,而且在你的表再次插入数据时,也不需要再执行此操作。

对表重建索引:

use database;
ALTER INDEX idx_table REBUILD;

对表的分区重建建索引:

use database;
ALTER INDEX idx_table partition (d = '2019-04-01') REBUILD ;

第四步

创建好之后,就可以对表进行操作了。

查看索引

重建之后可以显示索引:

SHOW FORMATTED INDEX ON table;

案例结果:

idx_name tab_name col_names idx_tab_name idx_type comment
idx_tmp_ceshi tmp_ceshi eid tmp_ceshi_index compact

注意

想要索引在查询时生效,还需要设置参数,默认情况下不使用索引。

SET hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat;
SET hive.optimize.index.filter=true;
SET hive.optimize.index.filter.compact.minsize=0;

这个部分也解决了我大表查询时间长的问题,再把大表建成索引表,再去关联时,和之间相比,时间缩短了一半,不过,索引有自身的试用情况,用时还是需要了解使用的场景的。下个小节会对分桶进行探讨,这也是优化job的一个方向。

【数据库】HIVE SQL索引及其使用相关推荐

  1. 数据库-SQL索引相关

    索引 索引表示数据的一种形式,它提供的数据顺序不同于数据在磁盘上的物理存储顺序.索引的特殊作用是在表内重新排列记录的物理位置.索引基于表的一列,或基于表的多列组合成立.当使用索引时,数据以一种分类排序 ...

  2. mysql 查询数据库索引语句_利用SQL语句查询数据库中所有索引

    本章我们就要讲解一下如何利用sql语句来查询出数据库中所有索引明细.当然了,我们可以在microsoft sql server management studio中选择"表"- & ...

  3. hive SQL 创建数据库,创建hive表、查询时,其表名,字段,统统不区分大写(在底层一律转换为小写)

    hive SQL 创建数据库,创建hive表.查询时,其表名,字段,统统不区分大写(在底层一律转换为小写) (1).默认default数据库 hive默认自带一个名为default的数据库,如果建表时 ...

  4. 【数据库】SQL Server索引碎片和解决方法

    SQLServer索引碎片和解决方法毫无疑问,给表添加索引是有好处的,你要做的大部分工作就是维护索引,在数据更改期间索引可能产生碎片,所以一些维护是必要的.碎片可能是你查询产生性能问题的来源. 那么到 ...

  5. Hadoop Hive sql 语法详细解释

    Hive 是基于Hadoop 构建的一套数据仓库分析系统.它提供了丰富的SQL查询方式来分析存储在Hadoop 分布式文件系统中的数据,能够将结构 化的数据文件映射为一张数据库表,并提供完整的SQL查 ...

  6. Hadoop Hive sql语法详解

    Hive 是基于Hadoop 构建的一套数据仓库分析系统,它提供了丰富的SQL查询方式来分析存储在Hadoop 分布式文件系统中的数据,可以将结构 化的数据文件映射为一张数据库表,并提供完整的SQL查 ...

  7. 刚装的系统没有sql server(mssqlserver)_数据库与SQL学习

    本篇是数据分析系统学习专栏的第四篇文章--数据库与SQL学习.如果想要了解写作初衷,可以先行阅读如何系统学习数据分析. 数据库和SQL的基本概念 推荐阅读:怎么简单地理解数据库的概念? 核心概念: 数 ...

  8. 搜狐 Hive SQL 血缘关系解析与应用

    1. 研究背景 随着企业信息化和业务的发展,数据资产日益庞大,数据仓库构建越来越复杂,在数仓构建的过程中,常遇到数据溯源困难,数据模型修改导致业务分析困难等难题,此类问题主要是由于数据血缘分析不足造成 ...

  9. (超长文)Hive Sql基本操作

    Hive Sql基本操作 1.hive里面不显示列名 2.注释问题2.1 MySQL中的注释2.2 Hive中的注释3.乱码问题3.1 修改表字段注解和表注解3.2 修改分区字段注解3.3 修改索引注 ...

最新文章

  1. Windows网络通信(二):socket异步编程
  2. 图像处理(四)图像分割(2)测地距离Geodesic图割
  3. 【Python】PAT-1026 程序运行时间(AC)
  4. 高斯赛尔德、牛顿拉尔逊matlab潮流计算
  5. mysql源代码安装
  6. C语言高级编程:指针变量p指向的地址与p自身的地址
  7. hashset java 键值对_Java集合 - HashSet的定义以及用法
  8. centos安装 node.js
  9. HTML5——Web Workers
  10. 双十一还没来,快递公司已经宣布涨价
  11. java程序员内功_Java程序员如何成为内功深厚的架构师
  12. 黑客,计算机革命的英雄!
  13. 【渝粤教育】国家开放大学2018年春季 0179-21T数据库基础与应用 参考试题
  14. SQLSERVER备份事务日志的作用
  15. 解决办法:ImportError: No module named google.protobuf.internal
  16. 第54件事 引爆流行的3个条件
  17. 哲学家谈“情绪”——欲望以上,理性未满
  18. tmux | 使用手册 (cheat sheet)
  19. 直方图均衡化(II)
  20. opencv和pytorch中的warp操作函数:cv2.warpAffine, torch.nn.functional.grid_sample, cv2.warpPerspective

热门文章

  1. theharvester用法
  2. 【整车静态电流测试解决方案】
  3. mysql thd_MySQL 5.7: 数据库THD连接管理重构
  4. 软考快要开始了,怎么以最短的时间得到最多的分数(软考考试大纲最新版)
  5. 高层论坛︱王家耀院士:“互联网+”时空大数据与智慧城市(2)
  6. 怎么彻底卸载office365?
  7. [实体关系抽取|顶刊论文]UniRel:Unified Representation and Interaction for Joint Relational Triple Extraction
  8. Oracle格式化日期:yyyy年mm月dd日
  9. 转载:细说单片机晶振电路中22pf或30pf电容的作用
  10. 【Kotlin 协程】协程取消 ② ( CPU 密集型协程任务取消 | 使用 isActive 判定协程状态 | 使用 ensureActive 函数取消协程 | 使用 yield 函数取消协程 )