hive之视图和索引

时间:2021-03-20 21:16:50

一、视图

1、视图定义

  视图其实是一个虚表,视图可以允许保存一个查询,并像对待表一样对这个查询进行操作,视图是一个逻辑结构,并不会存储数据。

2、视图的创建

  通过创建视图来限制数据访问可以用来保护信息不被随意查询。

  create table userinfo(

    id int,name string,age int,address string

  );

  create view some_userinfo as

  select id,name from userinfo;

3、删除视图

  drop view if exists userinfo;  

4、关于视图的知识

  show tables 可以查看视图,不能使用insert和load命令来操作视图。

  视图是只读的,对视图的操作都是操作元数据。

 

二、索引

1、索引的概念:

  hive中只有有限的索引功能,hive中没有主键和外键的概念,可以通过对一些字段建立索引来加速某些操作。一张表的索引数据存储在另外一张表中。

  当逻辑分区太多太细时而无法使用时,建立索引也就成为分区的另外一个选择。维护索引和创建索引需要消耗计算资源。

  除了s3文件系统的数据,对外部表和视图都是可以建立索引的。

  目前hive通过实现索引接口的Java类(CompactIndexHandler)来指定索引处理器,还增加了Bitmap索引处理器(应用于排重后较少的列)

  不能使用drop table语句之前删除索引。

  若有索引表,删除一个索引将会删除这个索引表。

  若被索引的表被删除了,那么对应的索引和索引表也会被删除;若原始表的某个分区被删除了,那么这个分区对应的分区索引同时会被删除掉。  

2、创建索引:

  表结构:create table_employee(

        name string,

        salary float,

        subordinates array<string>,

        deductions map<string,float>

        address struct<street:string,city:string,state:string,zip:int>

      )partitioned by(country string,state string)

  索引结构:create index employee_index on table_employee(country)

       as ‘org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler’  // 'Bitmap'

       with deferred rebuild

       in table employee_index_table

       partitioned by (country,name)  //此分区是针对于employee_index_table

  使用索引:

    SELECT 字段名表 

    FROM 表名

    WITH (INDEX(索引名))

    WHERE 查询条件