Hive Lateral View、视图和索引创建详解

Lateral View

  • Lateral View 用于和UDTF函数(explode, split)结合来使用
  • 首先通过UDTF函数拆分成多行,再将多行结果组合成一个支持别名的虚拟表
  • 主要解决在select使用UDTF做查询的过程中,查询只能包含单个UDTF,不能包含其他字段,以及多个UDTF问题
lateral view udtf(expression) tablealias as columnAlias('', columnAlias)

使用方式如下:

select id, mycol1, mycol2, mycol3 from table_name
lateral view explode(column1) mytable1 as mycol1
lateral view explode(column2) mytable2 as mycol2, mycol3

Hive视图

和关系型数据库中的普通视图一样,hive也支持视图。

特点:

  • 不支持物化视图
  • 只能查询,不能做加载数据操作
  • 视图的创建,只是保存一份元数据,查询视图时才执行对应的子查询
  • view定义中若包含了order by / limit语句,当查询视图时也进行了order by / limit语句操作,view当中定义的优先级更高。

创建视图

create view [if not exists] [db_name.]view_name 
[(column_name [comment column_comment],)]
[COMMENT view_comment]
[TBLPROPERTIES(property_name=property_value..)]
as select ..

删除视图

drop view [if exists] [db_name.]view_name

Hive索引

所以主要目的是优化查询和检索性能。

创建索引

create index t1_index on table person2(name)
as 'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler'
with defered rebuild
in table t1_index_table;
  • as:用来指定索引器
  • in table:指定索引表,若不指定默认生成在default_person_t1_index_表中

查询索引

 

show index on table_name

重建索引

 

alter index index_name on table_name rebuild;

重建完毕之后,再次使用有索引的数据,即通过select查询数据

删除索引

drop index [if exists] index_name on table_name;

 

Leave a Comment

Comments

No comments yet. Why don’t you start the discussion?

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注