热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Hive详解之lateralview、视图和索引

一、 HiveLateralView虚表LateralView用于和UDTF函数(explode、split)结合来使用。

一、 Hive Lateral View虚表


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

语法: LATERAL VIEW udtf(expression) tableAlias AS columnAlias (',' columnAlias)

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

查询01:将爱好和城市用UDTF函数分开

查询02:使用聚合函数计数

select count(distinct(myCol1)), count(distinct(myCol2)), count(distinct(myCol3))from psn
LATERAL VIEW explode(likes) myTable1 AS myCol1
LATERAL VIEW explode(address) myTable2 AS myCol2, myCol3;

 

结果 :


二、hive View视图

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

特点:

  • 不支持物化视图
  • 只能查询,不能做加载数据操作
  • 视图的创建,只是保存一份元数据,查询视图时才执行对应的子查询
  • 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;

示例:

  • hive> create view psn_view as select name, age, likes from psn;
  • hive> select * from psn_view ;
  • hive> select * from psn_view ;


三、Hive 索引

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

创建索引:

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

 

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

 查询索引:show index on psn14;

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

删除索引:DROP INDEX IF EXISTS t1_index ON psn14;


推荐阅读
author-avatar
彭菜菜
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有