Hive 常用的SQL4 视图

简介

Hive 中的视图和 RDBMS 中视图的概念一致,都是一组数据的逻辑表示,本质上就是一条 SELECT 语句的结果集。视图是纯粹的逻辑对象,没有关联的存储 (Hive 3.0.0 引入的物化视图除外),当查询引用视图时,Hive 可以将视图的定义与查询结合起来,例如将查询中的过滤器推送到视图中。

视图

普通视图:是一个虚拟表,其本身不存储数据,数据是由查询语句定义的。简单来说视图只是的定义了 数据结构的元数据。
物化视图:是一个特殊物理表,视图本身保存数据,其数据来源是根据原始表或者是远程表查询而来,并且会定时更新数据。Hive目前仅3.0及以上版本支持

hive 视图特点

在 Hive 中可以使用 CREATE VIEW 创建视图,如果已存在具有相同名称的表或视图,则会抛出异常,建议使用 IF NOT EXISTS 预做判断。在使用视图时候需要注意以下事项:

  1. 只有逻辑视图,没有物化视图;
  2. 视图是只读的,不能 Load/Insert/Update/Delete 数据;
  3. hive的视图仅仅相当于一个sql的快捷方式,为了提升hql语句的可读性
  4. 视图在创建时候,只是保存了一份元数据,当查询视图的时候,才开始执行视图对应的那些子查询
  5. hive的视图保存在元数据库中 
    元数据库保存的类型为 VIRTUAL_VIEW
    元数据库保存当前视图代表的sql语句
  6. 创建视图时,如果 SELECT 语句中包含其他表达式,例如 x + y,则列名称将以_C0,_C1 等形式生成
  7. 创建视图时,如果未提供列名,则将从 SELECT 语句中自动派生列名
  8. 删除基表并不会删除视图,需要手动删除视图
  9. 在创建视图时候视图就已经固定,对基表的后续更改(如添加列)将不会反映在视图
  10. 视图可能包含 ORDER BY 和 LIMIT 子句。如果引用视图的查询语句也包含这类子句,其执行优先级低于视图对应字句。例如,视图 custom_view 指定 LIMIT 5,查询语句为 select * from custom_view LIMIT 10,此时结果最多返回 5 行。

创建视图

 create view view_name as select * from carss; 
 create view carss_view as select * from carss limit 500; 

查看视图

show tables;   // 可以查看表,也可以查看视图
desc view_name // 查看某个具体视图的信息
desc carss_view

删除视图

drop view view_name
drop view if exists carss_view

删除视图时,如果被删除的视图被其他视图所引用,这时候程序不会发出警告,但是引用该视图其他视图已经失效,需要进行重建或者删除。

使用视图

create view sogou_view as select * from sogou_table where rank > 3 ;
select count(distinct uid) from sogou_view;

修改视图

ALTER VIEW [db_name.]view_name AS select_statement;

被更改的视图必须存在,且视图不能具有分区,如果视图具有分区,则修改失败。

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章