当前位置:   article > 正文

hive学习(九)------lateral view,视图,索引_hive sql lateral view 性能

hive sql lateral view 性能

1.lateral view

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

语法:

LATERAL VIEW udtf(expression) tableAlias AS columnAlias (',' columnAlias)
  • 1

例:
统计人员表中共有多少种爱好、多少个城市?

select count(distinct(myCol1)), count(distinct(myCol2)) from psn2 
LATERAL VIEW explode(likes) myTable1 AS myCol1 
LATERAL VIEW explode(address) myTable2 AS myCol2, myCol3;
  • 1
  • 2
  • 3

注意:lateral view创建的虚拟表的别名可以任意名,可以重复已有表名。列的别名也可以为任意的名字,也可以重复已有名称。

2.视图

特点:
不支持物化视图(物理化的存储,orcale数据库支持,mysql不支持)
只能查询,不能做加载数据操作
视图的创建,只是保存一份元数据,查询视图时才执行对应的子查询
view定义中若包含了ORDER BY/LIMIT语句,当查询视图时也进行ORDER BY/LIMIT语句操作,view当中定义的优先级更高
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 ... ;
查询视图:
select colums from view;
删除视图:
DROP VIEW [IF EXISTS] [db_name.]view_name;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

拓展:
mysql数据库的视图可以进行数据的修改,修改后会对原始表造成更改。
只读视图,只能进行读取,不能对数据进行修改和更新。

3. 索引

目的:优化查询以及检索性能
创建索引:

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

create index t1_index on table psn2(name) 
as 'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler' with deferred rebuild

查询索引
show index on psn2;

重建索引(建立索引之后必须重建索引才能生效)
ALTER INDEX t1_index ON psn REBUILD;

删除索引
DROP INDEX IF EXISTS t1_index ON psn2;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/655722
推荐阅读
相关标签
  

闽ICP备14008679号