CREATE VIEW
描述
视图基于 SQL
查询的结果集。CREATE VIEW
构建一个没有物理数据的虚拟表,因此 ALTER VIEW
和 DROP VIEW
等其他操作只改变元数据。
语法
CREATE [ OR REPLACE ] [ [ GLOBAL ] TEMPORARY ] VIEW [ IF NOT EXISTS ] view_identifier
create_view_clauses AS query
参数
-
OR REPLACE
如果同名视图已存在,它将被替换。
-
[ GLOBAL ] TEMPORARY
TEMPORARY 视图是会话范围的,并在会话结束时被删除,因为它会跳过在底层元存储(如果有)中持久化定义。GLOBAL TEMPORARY 视图与系统保留的临时数据库
global_temp
绑定。 -
IF NOT EXISTS
如果视图不存在则创建它。
-
view_identifier
指定视图名称,可选择使用数据库名称进行限定。
语法:
[ database_name. ] view_name
-
create_view_clauses
这些子句是可选的,且顺序无关。它可以是以下格式之一。
[ ( column_name [ COMMENT column_comment ], ... ) ]
用于指定列级注释。[ COMMENT view_comment ]
用于指定视图级注释。[ TBLPROPERTIES ( property_name = property_value [ , ... ] ) ]
用于添加元数据键值对。-
[ WITH SCHEMA { BINDING | COMPENSATION | [ TYPE ] EVOLUTION } ]
用于指定视图如何响应模式更改此子句不支持
TEMPORARY
视图。- BINDING - 视图只能容忍底层模式中需要安全向上转换的类型更改。
- COMPENSATION - 视图可以容忍底层模式中需要类型转换的类型更改。运行时可能会发生类型转换错误。
- TYPE EVOLUTION - 视图将适应底层模式中的任何类型更改。
- EVOLUTION - 对于未定义列列表的视图,视图会适应任何模式更改,包括对于带有
SELECT *
的查询,删除或添加的列。如果视图是使用列列表定义的,则该子句被解释为TYPE EVOLUTION
。
默认值为
WITH SCHEMA COMPENSATION
。
-
query 一个 SELECT 语句,用于从基表或其他视图构建视图。
示例
-- Create or replace view for `experienced_employee` with comments.
CREATE OR REPLACE VIEW experienced_employee
(ID COMMENT 'Unique identification number', Name)
COMMENT 'View for experienced employees'
AS SELECT id, name FROM all_employee
WHERE working_years > 5;
-- Create a global temporary view `subscribed_movies` if it does not exist.
CREATE GLOBAL TEMPORARY VIEW IF NOT EXISTS subscribed_movies
AS SELECT mo.member_id, mb.full_name, mo.movie_title
FROM movies AS mo INNER JOIN members AS mb
ON mo.member_id = mb.id;
-- Create a view filtering the `orders` table which will adjust to schema changes in `orders`.
CREATE OR REPLACE VIEW open_orders WITH SCHEMA EVOLUTION
AS SELECT * FROM orders WHERE status = 'open';