前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >大数据入门基础系列之详谈Hive的索引

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

作者头像
企鹅号小编
发布2018-02-12 10:41:51
1K0
发布2018-02-12 10:41:51
举报

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

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

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

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

索引是作用列上面的 。

索引是为了提高查询速度的,视图是在查询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/

本文来自企鹅号 - 好记性不如烂笔头干货媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文来自企鹅号 - 好记性不如烂笔头干货媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档