首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Hive之HiveQL索引

【导读:数据是二十一世纪的石油,蕴含巨大价值,这是·情报通·大数据技术系列第[24]篇文章,欢迎阅读和收藏】

1基本概念

Hive支持索引,但是 Hive 的索引与关系型数据库中的索引并不相同,比如, Hive 不支持主键或者外键。Hive 索引可以建立在表中的某些列上,以提升一些操作的效率,例如减少 MapReduce 任务中需要读取的数据块的数量。在可以预见到分区数据非常庞大的情况下,索引常常是优于分区的。需要时刻记住的是, Hive 并不像事物数据库那样针对个别的行来执行查询、更新、删除等操作。这些操作依赖高效的索引来实现高性能。

Hive是一种批处理工具,通常用在多任务节点的场景下,快速地扫描大规模数据。关系型数据库则适用于典型的单机运行、 I/O 密集型的场景。Hive 通过并行化来实现性能,因此 Hive 更适用于全表扫描这样的操作,而不是像使用关系型数据库一样操作。

2术语解释

索引机制:在指定列上建立索引,会产生一张索引表( Hive 的一张物理表),里面的字段包括,索引列的值、该值对应的 HDFS 文件路径、该值在文件中的偏移量 ; 在执行索引字段查询时候,首先额外生成一个 MR job ,根据对索引列的过滤条件,从索引表中过滤出索引列的值对应的 hdfs 文件路径及偏移量,输出到 hdfs 上的一个文件中,然后根据这些文件中的 hdfs 路径和偏移量,筛选原始 input 文件,生成新的 split, 作为整个 job 的 split, 这样就达到不用全表扫描的目的。

3详细说明

Hive 的索引目的是提高 Hive 表指定列的查询速度。没有索引时,类似 'WHERE tab1.col1 = 10' 的查询, Hive 会加载整张表或分区,然后处理所有的 rows ,但是如果在字段 col1 上面存在索引时,那么只会加载和处理文件的一部分。与其他传统数据库一样,增加索引在提升查询速度时,会消耗额外资源去创建索引和需要更多的磁盘空间存储索引。Hive 0.7.0 版本中,加入了索引。Hive 0.8.0 版本中增加了 bitmap 索引。

如下为创建表和索引案例

步骤一:创建索引测试表

CREATE TABLE index_test(

id INT,

name STRING

)

PARTITIONED BY (dt STRING)

ROW FORMAT DELIMITED FILEDS TERMINATED BY ',';

说明:

创建一个索引测试表 index_test , dt 作为分区属性,

“ROW FORMAT DELIMITED FILEDS TERMINATED BY ','” 表示用逗号分割字符串,默认为 ‘\001’ 。

步骤二:创建临时索引表

create table index_tmp(

id INT,

name STRING,

dt STRING

)

ROW FORMAT DELIMITED FILEDS TERMINATED BY ',';

说明:临时索引表是 table index_tmp

步骤三:加载数据到临时索引表中

load data local inpath '/home/hadoop/djt/test.txt' into table index_tmp;

步骤四:设置 Hive 的索引属性来优化索引查询

步骤五:查询临时索引表中的数据,插入到索引测试表中。

insert overwrite table index_test partition(dt) select id,name,dt from index_tmp;

步骤六:使用 索引测试表,在属性 id 上创建一个索引

步骤七:填充索引测试表的索引数据

alter index index1_index_test on index_test rebuild;

步骤八:查看索引测试表的创建的索引

show index on index_test

步骤九:查看索引测试表的分区信息

show partitions index_test;

步骤十:查看索引测试表的索引数据

$ hadoop fs -ls /usr/hive/warehouse/default_index_test_index1_index_test_

步骤十一:删除索引测试表的索引

drop index index1_index_test on index_test;

show index on index_test;

步骤十二:索引测试表的索引数据也被删除

$ hadoop fs -ls /usr/hive/warehouse/default_index_test_index1_index_test_

no such file or directory

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20191225A002M400?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券