大数据入门基础系列之详谈Hive的索引

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。

在前面的博文里,我已经介绍了

视图和索引的区别(简单地来谈谈)

视图是指计算机数据库中的视图,是一个虚拟表,即不是实实在在的,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。

一般情况,是多表关联查询的时候,才用视图。

对一个表来说,视图是横向的,一般创建视图查询语句都要加条件的 。

索引是作用列上面的 。

索引是为了提高查询速度的,视图是在查询sql的基础上的。

比如一个表很多字段,你查询的时候,只是想取得其中一部分字段,并且包含一些特定条件的数据 ,这个时候最好用视图。

索引是为了提高查询速度的,视图是在查询sql的基础上的。

对一个表来说,视图是横向的,一般创建视图查询语句都要加条件的

索引是作用列上面的,拿索引来说,在某列上建立索引,得到的这个索引表,其实是原来的表而已。只是取了个新名字。因为在建立了索引包装了一下

视图是指计算机数据库中的视图,是一个虚拟表,即不是实实在在的,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。

一般情况,是多表关联查询的时候,才用视图

对一个表来说,视图是横向的,一般创建视图查询语句都要加条件的

索引是作用列上面的

索引是为了提高查询速度的,视图是在查询sql的基础上的。

比如一个表很多字段,你查询的时候,只是想取得其中一部分字段,并且包含一些特定条件的数据 ,这个时候最好用视图。

为什么要创建索引?

Hive的索引目的是提高Hive表指定列的查询速度。

没有索引时,类似'WHERE tab1.col1 = 10' 的查询,Hive会加载整张表或分区,然后处理所有的rows,

但是如果在字段col1上面存在索引时,那么只会加载和处理文件的一部分。

与其他传统数据库一样,增加索引在提升查询速度时,会消耗额外资源去创建索引和需要更多的磁盘空间存储索引。

Hive 0.7.0版本中,加入了索引。Hive 0.8.0版本中增加了bitmap索引。

Hive里的2维坐标系统(第一步定位行键 -> 第二步定位列修饰符)

HBase里的4维坐标系统(第一步定位行键 -> 第二步定位列簇 -> 第三步定位列修饰符 -> 第四步定位时间戳)

HBase里的4维坐标系统(第一步定位行键 -> 第二步定位列簇 -> 第三步定位列修饰符 -> 第四步定位时间戳)

行键,相当于第一步级索引。

  列簇,相当于第二步级索引。

  列修饰符,相当于第三步级索引。

  时间戳,相当于第四步级索引。

索引操作

  1)Hive创建索引。

这里不多赘述。

  2)更新数据。

Hive>alterindexuser_indexonuserrebuild;

  3)删除索引

Hive>drop indexuser_indexon user;

  4)查看索引

Hive>show index on user;

  5)创建表和索引案例

Hive> 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’。

  6)创建一个临时索引表 index_tmp。

Hive> create table index_tmp(id INT,name STRING,dt STRING) ROW FORMAT DELIMITED FILEDS TERMINATED BY ',';

  7)加载本地数据到 index_tmp表中。

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

设置 Hive 的索引属性来优化索引查询,命令如下。

  8)查询index_tmp表中的数据,插入 table_test表中。

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

  9)使用 index_test表,在属性 id上创建一个索引index1_index_test。

  10)填充索引数据。

Hive>alter indexindex1_index_testonindex_testrebuild;

  11)查看创建的索引。

Hive>show indexonindex_test

  12)查看分区信息。

Hive>show partitionsindex_test;

  13)查看索引数据。

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

  14)删除索引。

Hive>drop indexindex1_index_testonindex_test;

Hive>show index on index_test;

  15)索引数据也被删除。

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

no such file or directory

  16)修改配置文件信息。

Hive.optimize.index.filter    true

Hive.optimize.index.groupby     true

Hive.optimize.index.filter.compact.minsize    5120

用索引的时候必须把这两个参数开启,才能起到作用。

更多详细,见

Hadoop Hive概念学习系列之hive的索引及案例(八)

http://www.cnblogs.com/zlslch/p/6104090.html

Hadoop Hive概念学习系列之hive里的索引(十三)

http://www.cnblogs.com/zlslch/p/6105294.html

http://www.cnblogs.com/zlslch/http://www.cnblogs.com/lchzls/

看完本文有收获?请转发分享给更多人

关注「大数据躺过的坑」,提升大神技能

觉得不错,请点赞和留言

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

扫码关注云+社区

领取腾讯云代金券