Amazon Redshift
数据库开发人员指南 (API Version 2012-12-01)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

CREATE VIEW

在数据库中创建一个视图。视图实际上不是具体化的;当查询中引用视图时,定义视图的查询将运行。要使用外部表创建视图,请包括 WITH NO SCHEMA BINDING 子句。

拥有视图的所有权或获得视图的权限并不意味着可访问基础表。您需要显式授予对基础表的访问权限。

语法

Copy
CREATE [ OR REPLACE ] VIEW name [ ( column_name [, ...] ) ] AS query [ WITH NO SCHEMA BINDING ]

参数

OR REPLACE

如果存在同名视图,则将替换视图。您只能将视图替换为生成相同的列集的新查询(使用相同的列名和数据类型)。CREATE OR REPLACE VIEW 将锁定视图以阻止读取和写入,直至操作完成。

name

视图的名称。如果提供 schema 名称(例如,myschema.myview),则使用指定 schema 创建视图。否则,将在当前 schema 中创建视图。视图名称必须与同一 schema 中任何其他视图或表的名称不同。

如果指定以“#”开头的视图名称,则视图将创建为仅在当前会话中可见的临时视图。

有关有效名称的更多信息,请参阅名称和标识符。无法在系统数据库 template0、template1 和 padb_harvest 中创建表或视图。

column_name

要用于视图中的列的名称的可选列表。如果未提供列名,则从查询派生列名。可在单个视图中定义的列的最大数目为 1,600。

query

计算结果为表的查询(采用 SELECT 语句的形式)。此表定义视图中的列和行。

WITH NO SCHEMA BINDING

指定视图未绑定到基础数据库对象 (例如表和用户定义的函数) 的子句。因此,视图与其引用的对象之间不存在依赖关系。即使引用的对象不存在,您也可以创建视图。由于不存在依赖关系,删除或更改引用的对象不会影响视图。在查询视图之前,Amazon Redshift 不会检查依赖关系。

在包括 WITH NO SCHEMA BINDING 子句时,必须使用架构名称来限定 SELECT 语句中引用的表和视图。创建视图时,即使引用的表不存在,架构也必须存在。例如,以下语句将返回错误。

Copy
create view myevent as select eventname from event with no schema binding;

以下语句将成功执行。

Copy
create view myevent as select eventname from public.event with no schema binding;

注意

无法从视图进行更新、插入或删除操作。

使用说明

后期绑定视图

后期绑定视图不检查基础数据库对象 (如表和视图),直至该视图被查询为止。因此,您可以修改或删除基础对象,而不必删除和重新创建视图。

要创建后期绑定视图,请加入 WITH NO SCHEMA BINDING 子句。以下示例创建一个没有架构绑定的视图。

Copy
create view event_vw as select * from public.event with no schema binding; select * from event_vw limit 1; eventid | venueid | catid | dateid | eventname | starttime --------+---------+-------+--------+---------------+-------------------- 2 | 306 | 8 | 2114 | Boris Godunov | 2008-10-15 20:00:00

以下示例显示您可以修改基础表,而不必重新创建视图。

Copy
alter table event rename column eventname to title; select * from event_vw limit 1; eventid | venueid | catid | dateid | title | starttime --------+---------+-------+--------+---------------+-------------------- 2 | 306 | 8 | 2114 | Boris Godunov | 2008-10-15 20:00:00

您只能在后期绑定视图中引用 Amazon Redshift Spectrum 外部表。后期绑定视图的一种应用是查询 Amazon Redshift 和 Redshift Spectrum 表。例如,您可以使用 UNLOAD 命令将较旧的数据存档至 Amazon S3。然后,创建一个 Redshift Spectrum 外部表,该表引用 Amazon S3 中的数据并创建一个可查询这两个表的视图。以下示例使用 UNION ALL 子句来联接 Amazon Redshift SALES 表和 Redshift Spectrum SPECTRUM.SALES 表。

Copy
create view sales_vw as select * from public.sales union all select * from spectrum.sales with no schema binding;

有关创建 Redshift Spectrum 外部表 (包括 SPECTRUM.SALES 表) 的更多信息,请参阅Amazon Redshift Spectrum 入门

示例

以下命令从名为 EVENT 的表创建一个名为 myevent 的视图。

Copy
create view myevent as select eventname from event where eventname = 'LeAnn Rimes';

以下命令从名为 USERS 的表创建一个名为 myuser 的视图。

Copy
create view myuser as select lastname from users;

以下示例创建一个没有架构绑定的视图。

Copy
create view myevent as select eventname from public.event with no schema binding;

本页内容: