Hive 视图
1、视图的特点:
①不支持物化视图
②只能查询,不能做加载数据操作 load data into
③视图的创建,只是保存一份元数据,查询视图时才执行对应的子查询
④view定义中若包含了ORDER BY/LIMIT语句,当查询视图时也进行ORDER BY/LIMIT语句操作,view当中定义的优先级更高
⑤view支持迭代视图
⑥一旦创建成功,无法修改
2、为什么创建视图?
select a.name,b.age from table1 a join table2 b on(a.id=b.id) => view
如果后期经常执行这个查询语句,每次都写麻烦
可以将长的SQL(数据表)与视图对应映射,每次查询这个视图就是执行了长的SQL语句
3、视图操作
#创建视图
CREATE VIEW IF NOT EXISTS view1 AS SELECT * FROM logtbl order by age;
#可以查看已经创建的视图
show tables
#删除视图
drop view view1
创建视图的时候不会启动MR任务
select * from view1;
但是在查询视图的时候会启动MR任务
视图的创建,只是保存一份元数据,查询视图时才执行对应的子查询
Hive 索引
索引
优化查询性能
若使用select * from table where age = 10;假设这个表的数据非常大,是有10个block组成
name查询的性能会很低
提高性能?
索引1(age > 10) block1(100,200) block2(200,389)
索引2(age = 10) block1(101,220) block2(200,389)
这个索引就类似目录
创建索引库,用于存放索引
create index t2_index on table psnbucket_partition(age)
as 'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler' with deferred rebuild
in table t2_index_table;
索引库中只是保存一些元数据,比如 对哪个字段创建索引,对哪个表创建索引等
alter index t2_index on psnbucket_partition rebuild;
这一步是真正的创建索引信息,并且存储到索引库中,若数据库有新增数据,也可以使用以上语句重建索引
查看索引库:
66 hdfs://zfg/user/hive_remote/warehouse/psnbucket_partition/height=188.0/000000_0 [0,30,60,90,120] 188.0
77 hdfs://zfg/user/hive_remote/warehouse/psnbucket_partition/height=188.0/