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 ROWSON 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