Amazon Redshift
数据库开发人员指南 (API 版本 2012-12-01)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

CREATE VIEW

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

要创建标准视图,您需要对基础表的访问权限。要查询标准视图,您需要选择针对视图本身的特权,但不需要选择针对基础表的特选。要查询后期绑定视图,您需要选择针对后期捆绑视图本身的特权。您还应该确定后期绑定视图的所有者具有对引用的对象 (表、视图或用户定义的函数) 的选择特权。有关后期捆绑视图的更多信息,请参阅使用说明

语法

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 不会检查依赖关系。要查看有关后期绑定视图的详细信息,请运行 PG_GET_LATE_BINDING_VIEW_COLS 函数。

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

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

以下语句将成功执行。

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

注意

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

使用说明

后期绑定视图

后期绑定视图不检查基础数据库对象 (如表和视图),直至该视图被查询为止。因此,您可以修改或删除基础对象,而不必删除和重新创建视图。如果您删除了基础对象,对后期绑定视图的查询将失败。如果对后期绑定视图的查询引用了基础对象中的不存在的列,查询将失败。

如果您删除然后重新创建了后期绑定视图的基础表或视图,将使用默认访问权限创建新对象。您可能需要为将查询后期绑定视图的用户授予对基础对象的权限。

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

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

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

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 表。

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 的视图。

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

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

create view myuser as select lastname from users;

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

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

本页内容: