hive view 视图

QQ交流群:335671559

视图可以保存查询语句,可以像对待表一样对待视图,它只是一个逻辑上的结构,目前hive还不支持实例化的视图

7.1 视图降低复杂度
原始语句
FROM (
SELECT * FROM people JOIN cart
ON (cart.people_id=people.id) WHERE firstname='john'
) a SELECT a.lastname WHERE a.id=3;

创建视图
CREATE VIEW shorter_join AS
SELECT * FROM people JOIN cart
ON (cart.people_id=people.id) WHERE firstname='john';

使用视图
SELECT lastname FROM shorter_join WHERE id=3;
7.2创建视图方式
CREATE VIEW IF NOT EXISTS shipments(time, part)
COMMENT 'Time and parts for shipments.'
TBLPROPERTIES ('creator' = 'me')
AS SELECT ...;
7.3 复制视图
CREATE TABLE shipments2
LIKE shipments;
7.4 删除视图
    DROP VIEW IF EXISTS shipments
7.5 视图显示
    视图和表在展示上是一致的,所以使用SHOW TABLES就可以展示出视图,没有SHOW VIEWS用法

视图是只读的,只可以修改视图元数据TBLPROPERTIES
ALTER VIEW shipments SET TBLPROPERTIES ('created_at' = 'some_timestamp');
### Hive视图的概念及其用途 #### 1. 视图的定义 Hive 中的视图View)是一种逻辑上的表结构,它实际上并不存储数据,而是保存了一条查询语句。通过视图,用户可以像操作普通表一样执行查询操作[^1]。视图Hive 中只支持逻辑视图,而不支持物理视图,这意味着视图本身不会占用额外的存储空间[^3]。 #### 2. 视图的特点 - **降低复杂性**:视图可以通过封装复杂的查询逻辑来简化用户的查询操作。例如,将多个表的联结和过滤条件封装到视图中,用户可以直接查询视图而无需关心底层的复杂查询逻辑[^2]。 - **局部暴露**:视图可以用来限制对底层数据的访问范围。尽管 Hive 不支持基于权限的安全机制,但通过创建视图,管理员可以控制用户只能看到特定的数据子集[^3]。 - **只读特性**:Hive 中的视图是只读的,用户无法通过视图直接修改底层表中的数据。此外,视图的元数据(如 TBLPROPERTIES)可以通过 `ALTER VIEW` 命令进行修改[^2]。 #### 3. 视图的创建与管理 以下是视图的基本操作示例: ##### 创建视图 ```sql CREATE VIEW IF NOT EXISTS v1 AS SELECT * FROM u1; CREATE VIEW IF NOT EXISTS v2 AS SELECT * FROM u1 WHERE id > 100; ``` 注意:不能使用 `CREATE VIEW ... LIKE` 的方式创建视图,因为这种方式会导致问题[^1]。 ##### 查询视图 ```sql SELECT * FROM v1 WHERE id = 10000; ``` ##### 显示视图 ```sql SHOW TABLES; -- 视图和表在展示上是一致的 DESCRIBE v1; DESCRIBE EXTENDED v1; SHOW CREATE TABLE v1; ``` ##### 删除视图 ```sql DROP VIEW IF EXISTS v2; ``` ##### 修改视图数据 ```sql ALTER VIEW v1 SET TBLPROPERTIES ('creator' = 'me'); ``` #### 4. 视图的应用场景 - **简化复杂查询**:当需要频繁执行复杂的多表联结或过滤操作时,可以将这些逻辑封装到视图中,从而减少重复编写复杂查询的工作量[^2]。 - **数据隔离**:通过创建视图,管理员可以限制用户只能访问特定的数据子集,从而实现一定程度的数据隔离和保护。 - **提高可维护性**:如果底层表的结构发生变化,只需修改视图的定义即可,而无需更改所有依赖该视图的应用程序或脚本。 ### 示例代码 以下是一个创建视图并使用视图的完整示例: ```sql -- 创建原始表 CREATE TABLE people ( id INT, firstname STRING, lastname STRING ); CREATE TABLE cart ( id INT, people_id INT, product STRING ); -- 插入测试数据 INSERT INTO people VALUES (1, 'john', 'smith'), (2, 'jane', 'doe'); INSERT INTO cart VALUES (1, 1, 'apple'), (2, 2, 'banana'); -- 创建视图 CREATE VIEW IF NOT EXISTS shorter_join AS SELECT p.id, p.firstname, p.lastname, c.product FROM people p JOIN cart c ON (c.people_id = p.id) WHERE p.firstname = 'john'; -- 使用视图 SELECT lastname, product FROM shorter_join WHERE id = 1; ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值