【数据库】HIVE SQL索引及其使用
最近在用一张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索引及其使用相关推荐
- 数据库-SQL索引相关
索引 索引表示数据的一种形式,它提供的数据顺序不同于数据在磁盘上的物理存储顺序.索引的特殊作用是在表内重新排列记录的物理位置.索引基于表的一列,或基于表的多列组合成立.当使用索引时,数据以一种分类排序 ...
- mysql 查询数据库索引语句_利用SQL语句查询数据库中所有索引
本章我们就要讲解一下如何利用sql语句来查询出数据库中所有索引明细.当然了,我们可以在microsoft sql server management studio中选择"表"- & ...
- hive SQL 创建数据库,创建hive表、查询时,其表名,字段,统统不区分大写(在底层一律转换为小写)
hive SQL 创建数据库,创建hive表.查询时,其表名,字段,统统不区分大写(在底层一律转换为小写) (1).默认default数据库 hive默认自带一个名为default的数据库,如果建表时 ...
- 【数据库】SQL Server索引碎片和解决方法
SQLServer索引碎片和解决方法毫无疑问,给表添加索引是有好处的,你要做的大部分工作就是维护索引,在数据更改期间索引可能产生碎片,所以一些维护是必要的.碎片可能是你查询产生性能问题的来源. 那么到 ...
- Hadoop Hive sql 语法详细解释
Hive 是基于Hadoop 构建的一套数据仓库分析系统.它提供了丰富的SQL查询方式来分析存储在Hadoop 分布式文件系统中的数据,能够将结构 化的数据文件映射为一张数据库表,并提供完整的SQL查 ...
- Hadoop Hive sql语法详解
Hive 是基于Hadoop 构建的一套数据仓库分析系统,它提供了丰富的SQL查询方式来分析存储在Hadoop 分布式文件系统中的数据,可以将结构 化的数据文件映射为一张数据库表,并提供完整的SQL查 ...
- 刚装的系统没有sql server(mssqlserver)_数据库与SQL学习
本篇是数据分析系统学习专栏的第四篇文章--数据库与SQL学习.如果想要了解写作初衷,可以先行阅读如何系统学习数据分析. 数据库和SQL的基本概念 推荐阅读:怎么简单地理解数据库的概念? 核心概念: 数 ...
- 搜狐 Hive SQL 血缘关系解析与应用
1. 研究背景 随着企业信息化和业务的发展,数据资产日益庞大,数据仓库构建越来越复杂,在数仓构建的过程中,常遇到数据溯源困难,数据模型修改导致业务分析困难等难题,此类问题主要是由于数据血缘分析不足造成 ...
- (超长文)Hive Sql基本操作
Hive Sql基本操作 1.hive里面不显示列名 2.注释问题2.1 MySQL中的注释2.2 Hive中的注释3.乱码问题3.1 修改表字段注解和表注解3.2 修改分区字段注解3.3 修改索引注 ...
最新文章
- Windows网络通信(二):socket异步编程
- 图像处理(四)图像分割(2)测地距离Geodesic图割
- 【Python】PAT-1026 程序运行时间(AC)
- 高斯赛尔德、牛顿拉尔逊matlab潮流计算
- mysql源代码安装
- C语言高级编程:指针变量p指向的地址与p自身的地址
- hashset java 键值对_Java集合 - HashSet的定义以及用法
- centos安装 node.js
- HTML5——Web Workers
- 双十一还没来,快递公司已经宣布涨价
- java程序员内功_Java程序员如何成为内功深厚的架构师
- 黑客,计算机革命的英雄!
- 【渝粤教育】国家开放大学2018年春季 0179-21T数据库基础与应用 参考试题
- SQLSERVER备份事务日志的作用
- 解决办法:ImportError: No module named google.protobuf.internal
- 第54件事 引爆流行的3个条件
- 哲学家谈“情绪”——欲望以上,理性未满
- tmux | 使用手册 (cheat sheet)
- 直方图均衡化(II)
- opencv和pytorch中的warp操作函数:cv2.warpAffine, torch.nn.functional.grid_sample, cv2.warpPerspective
热门文章
- theharvester用法
- 【整车静态电流测试解决方案】
- mysql thd_MySQL 5.7: 数据库THD连接管理重构
- 软考快要开始了,怎么以最短的时间得到最多的分数(软考考试大纲最新版)
- 高层论坛︱王家耀院士:“互联网+”时空大数据与智慧城市(2)
- 怎么彻底卸载office365?
- [实体关系抽取|顶刊论文]UniRel:Unified Representation and Interaction for Joint Relational Triple Extraction
- Oracle格式化日期:yyyy年mm月dd日
- 转载:细说单片机晶振电路中22pf或30pf电容的作用
- 【Kotlin 协程】协程取消 ② ( CPU 密集型协程任务取消 | 使用 isActive 判定协程状态 | 使用 ensureActive 函数取消协程 | 使用 yield 函数取消协程 )