视图(View)
1、特点
- 不支持物化视图
- 只能查询,不能做加载数据操作
- 视图的创建,只是保存一份元数据,查询视图时才执行对应的子查询
- view 定义中若包含了 order by / limit 语句,当查询视图时也进行 order by / limit 语句操作view 当中定义的优先级更高(例如,定义view数据为limit 10, 针对view的查询limit 20,则最多返回10条数据)。
- view 支持迭代视图
- 删除视图时,如果被删除的视图被其他视图所引用,这时候程序不会发出警告,但是引用该视图其他视图已经失效,需要进行重建或者删除。
2、Hive视图应用场景
- 数据仓库中维度角色扮演和维度子维度时可以采用视图的方式保证维度的一致性;
- 当Hive中的查询变得很长或复杂时,通过视图将这个查询语句分割成多个小的、更可控的片段可以降低这种复杂度;
- Hive中需要通过视图限制基于条件过滤的数据时;
3、hive中视图的使用
--创建视图
create view user_view
as SQL语句;
--视图查询
select * from user_view;
--删除视图
drop view user_view;
索引(index)
1、Hive索引机制和原理
Hive表的索引数据是存储在另一张表中的,这张表有三个子段,有索引列的值,该值对应的HDFS的文件路径,该值在数据文件中的偏移量。
当Hive通过索引列执行查询时,首先通过一个MR Job去查询索引表,根据索引列的过滤条件,查询出该索引列值对应的HDFS文件目录及偏移量,并且把这些数据输出到HDFS的一个文件中,然后再根据这个文件中去筛选原文件,作为查询Job的输入。
2、Hive索引的使用场景
在一些数据量很大的表,但你要通过某些特点的字段来筛选得到某些数据,在这样的情况下可以使用索引来提升查询的效率。
例如:在流量表中,查询 event为某些特点的值
3、Hive索引的优缺点
优点:
- 可以避免全表扫描和资源浪费
- 可以加快含有group by的语句的查询速度
缺点:
- 维护和创建索引需要额外的内存和计算资源
- 不会自动刷新,如果表有数据变动,索引表需要手动刷新
4、hive中索引的使用
--创建user表
create table user( id int, name string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE;
--创建索引表
create index user_index on table user(id)
as 'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler'
with deferred rebuild
IN TABLE user_index_table;
--建立索引
alter index user_index on user rebuild;
--想要索引在查询时,生效,还得设置使用索引:默认是不使用的。
SET hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat;
SET hive.optimize.index.filter=true;
SET hive.optimize.index.filter.compact.minsize=0;
--删除索引的语法
DROP INDEX IF EXISTS user_index ON TABLE user;