INTO TABLE 子句
从查询结果集中创建表。
语法
永久表:
INTO [TABLE] [[database.]schema.]table
临时表:
INTO [scope] TEMP[ORARY] [TABLE] [[database.]schema.]table
[ ON COMMIT { DELETE | PRESERVE } ROWS ]
参数
- scope
- 指定临时表定义的可见性:
-
GLOBAL
(默认值):表定义对所有会话可见,并且持续存在,直到显式删除了该表。 -
LOCAL
:表定义仅对在其中创建该表定义的会话可见,并在会话结束后删除。
不论此设置如何,都可通过
ON COMMIT DELETE ROWS
和ON COMMIT PRESERVE ROWS
关键字(见下文)设置临时表数据保留策略。有关详细信息,请参阅创建临时表。
-
-
[database.]schema
数据库和架构。默认架构为
public
。如果指定一个数据库,它必须是当前数据库。- 表
- 要创建的表的名称。
-
ON COMMIT { DELETE | PRESERVE } ROWS
- 指定数据为事务范围还是会话范围数据:
-
DELETE
(默认)会将临时表标记为事务范围数据。每次提交之后,Vertica 会移除所有表数据。 -
PRESERVE
会将临时表标记为会话范围数据,这些数据在单个事务结束后仍会保存。但会话结束后,Vertica 会移除所有表数据。
-
示例
以下 SELECT
语句包含一个 INTO TABLE
子句,该子句使用 customer_dimension
创建表 newTable
:
=> SELECT * INTO TABLE newTable FROM customer_dimension;
以下 SELECT
语句将创建临时表 newTempTable
。默认情况下,临时表是在全局范围创建的,因此该表定义对其他会话可见并一直存在,直到其被显式删除。不会将 customer_dimension
数据复制到新表中,且 Vertica 会发出相应的警告:
=> SELECT * INTO TEMP TABLE newTempTable FROM customer_dimension;
WARNING 4102: No rows are inserted into table "public"."newTempTable" because
ON COMMIT DELETE ROWS is the default for create temporary table
HINT: Use "ON COMMIT PRESERVE ROWS" to preserve the data in temporary table
CREATE TABLE
以下 SELECT
语句将创建本地临时表 newTempTableLocal
。表仅对在其中创建该表的会话可见,并在会话结束后自动删除。INTO TABLE
子句包括 ON COMMIT PRESERVE ROWS
,因此 Vertica 会将所有选择数据复制到新表中:
=> SELECT * INTO LOCAL TEMP TABLE newTempTableLocal ON COMMIT PRESERVE ROWS
FROM customer_dimension;
CREATE TABLE