HiveQL:索引

Posted 大数据DL

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HiveQL:索引相关的知识,希望对你有一定的参考价值。

一、创建索引

二、使用索引


Hive支持索引,但是Hive的索引与关系型数据库中的索引并不相同,比如,Hive不支持主键或者外键。hive索引比较麻烦 ,而且有些文件格式不支持,所以不常用,但是它确实提高查询速度。Hive的索引目的是提高Hive表指定列的查询速度。没有索引时,类似'WHERE tab1.col1 = 10' 的查询,Hive会加载整张表或分区,然后处理所有的rows,但是如果在字段col1上面存在索引时,那么只会加载和处理文件的一部分。与其他传统数据库一样,增加索引在提升查询速度时,会消耗额外资源去创建索引和需要更多的磁盘空间存储索引。Hive 0.7.0版本中,加入了索引。Hive 0.8.0版本中增加了bitmap索引。

一、创建索引

HiveQL:索引

with deferred rebuild  延迟重建,创建的时候并不赋值,后面通过:

HiveQL:索引

hive 的索引就是根据给定字段 ,放到一个新的索引表里面,保存表名,字段名和文件路径。

HiveQL:索引


左边是你自己表 ,右边是生成的索引表,索引表中key:原表中key字段的值,

_bucketname:代表数据文件对应的HDFS文件路径,_offsets:代表该key值在文件中的偏移量。可能有多个偏移量。所以字段类型为数组。所以利用索引 可以直接定位到你想要的数据文件,不会去扫描全表。

二、使用索引,首先设置:

HiveQL:索引

然后查询:

HiveQL:索引

注意:

HiveQL:索引

如果查询索引列

首先扫描索引表找到列名对应值 ,然后找到对应文件路径,直接去加载文件,省去扫描全部表。加快查询数据。

根据值直接查到路径,然后去加载对应文件就可以了,所以索引维护一张索引表,可以手动查看,如果表数据变更,索引表需要手动重建。



以上是关于HiveQL:索引的主要内容,如果未能解决你的问题,请参考以下文章

多个连接的 HiveQL 查询

Hiveql - 将每小时数据汇总到每天

HIVEQL,每天记录的数量

HiveQL编译基础

MongoDB 中的 HiveQL

HiveQL 相当于 MySQL 的 TRUNCATE()?