Hive 视图 索引

1.视图

视图保存一个查询,像通过一个表一样,对这个查询得到的结果进行操作(逻辑结构不物化),达到了降低查询复杂度的目的

如下是一个视图的构建,之后就可以像表一样操作这个视图了

create view xxx_xxx as
select .... from ... where time=...;

常见使用:

  1. 为了不让用户访问具有敏感数据的原始表,把部分数据作为一个视图供用户访问(create view safe_name_vinfo as select id,name from dim_user)
  2. hive的map等破坏了第一范式,可以通过视图把map的数据拿出来,变成符合范式的表(view)

1.1原理:

视图中保存的是一推复杂的SQL语句,是一个懒执行,只有我们用到此视图的时候才会执行此复杂的SQL语句;主要操作是将这么长的SQL(数据表)与视图对应映射,每次查询这个视图就是执行了长的SQL语句。

因此视图不是物化,是一个查询语句的固化操作。Hive会先解析视图,而后通过解析结果再解析整个查询语句(查询&视图可能会被合并成一条)。且视图创建之后,只保存一份元数据,只有当查询视图时才执行对应的子查询

2.索引

当逻辑分区太多太细的时候,简历索引成为分区的另一种选择。底层文件更改了,索引不会自动重建,一般手动重建索引(原子性的,报错rollback)

建立索引本质上讲是指定列上建立索引,会产生一张索引表(Hive的一张物理表),里面的字段包括,索引列的值、该值对应的HDFS文件路径、该值在文件中的偏移量。在执行索引字段查询时候,首先额外生成一个MR job,根据对索引列的过滤条件,从索引表中过滤出索引列的值对应的hdfs文件路径及偏移量,输出到hdfs上的一个文件中,然后根据这些文件中的hdfs路径和偏移量,筛选原始input文件,生成新的split,作为整个job的split,这样就达到不用全表扫描的目的。

优点:避免全表扫描和资源浪费

原文地址:https://www.cnblogs.com/tillnight1996/p/12828808.html