温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。
在前面的博文里,我已经介绍了
视图和索引的区别(简单地来谈谈)
视图是指计算机数据库中的视图,是一个虚拟表,即不是实实在在的,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。
一般情况,是多表关联查询的时候,才用视图。
对一个表来说,视图是横向的,一般创建视图查询语句都要加条件的 。
索引是作用列上面的 。
索引是为了提高查询速度的,视图是在查询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/
看完本文有收获?请转发分享给更多人
关注「大数据躺过的坑」,提升大神技能
觉得不错,请点赞和留言
领取专属 10元无门槛券
私享最新 技术干货