hive之视图和索引
一、视图
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 查询条件