CREATE FLEXIBLE TABLE

在逻辑架构中创建 flexible (Flex) 表。

创建 Flex 表时,Vertica 会自动创建两个依赖对象:

  • 名为 flex‑table‑name_keys 的键表

  • 名为 flex‑table‑name_view 的视图

Flex 表需要键表和视图。这些对象均不能独立于 Flex 表而存在。

语法

使用列定义创建

CREATE [[ scope ] TEMP[ORARY]] FLEX[IBLE] TABLE [ IF NOT EXISTS ]
   [[database.]schema.]table-name
   ( [ column‑definition[,...] [, table-constraint ][,...] ] )
   [ ORDER BY column[,...] ]
   [ segmentation‑spec ]
   [ KSAFE [k‑num] ]
   [ partition-clause]
   [ {INCLUDE | EXCLUDE} [SCHEMA] PRIVILEGES ]
   [ DISK_QUOTA quota ]

从其他表创建:

CREATE FLEX[IBLE] TABLE [[database.]schema.] table-name
   [ ( column-name-list ) ]
   [ {INCLUDE | EXCLUDE} [SCHEMA] PRIVILEGES ]
   AS  query [ ENCODED BY column-ref-list ]
   [ DISK_QUOTA quota ]

参数

有关常规参数描述,请参阅 CREATE TABLE;对于特定于临时 Flex 表的参数,请参阅 CREATE TEMPORARY TABLE创建 Flex 表

您无法在任何虚拟列(键)上对 Flex 表进行分区。

特权

非超级用户:表架构上的 CREATE 权限

默认列

CREATE 语句可以省略指定任何列定义。CREATE FLEXIBLE TABLE 总是自动创建两列:

__raw__
LONG VARBINARY 类型列,用于存储您加载的非结构化数据。默认情况下,此列具有 NOT NULL 约束。
__identity__
IDENTITY 列,用于在未定义其他列时进行分段和排序。

默认投影

在您创建 Flex 表和键表时,Vertica 会自动为它们创建 超投影

如果通过一个或多个 ORDER BY、ENCODED BY、SEGMENTED BY 或 KSAFE 子句创建 Flex 表,则可使用该子句的信息创建投射。如果未使用任何子句,Vertica 将使用以下默认值:

示例

以下示例将创建一个名为 darkdata 的 Flex 表,而不指定任何列信息。Vertica 将在创建表的过程中创建默认的超投影和伙伴实例投影:

=> CREATE FLEXIBLE TABLE darkdata();
CREATE TABLE
=> \dj darkdata1*
                         List of projections
 Schema |         Name         |  Owner  |       Node       | Comment
--------+----------------------+---------+------------------+---------
 public | darkdata1_b0         | dbadmin |                  |
 public | darkdata1_b1         | dbadmin |                  |
 public | darkdata1_keys_super | dbadmin | v_vmart_node0001 |
 public | darkdata1_keys_super | dbadmin | v_vmart_node0002 |
 public | darkdata1_keys_super | dbadmin | v_vmart_node0003 |
(5 rows)

=> SELECT export_objects('','darkdata1_b0');
CREATE PROJECTION public.darkdata1_b0 /*+basename(darkdata1),createtype(P)*/
(
 __identity__,
 __raw__
)
AS
 SELECT darkdata1.__identity__,
        darkdata1.__raw__
 FROM public.darkdata1
 ORDER BY darkdata1.__identity__
SEGMENTED BY hash(darkdata1.__identity__) ALL NODES OFFSET 0;

SELECT MARK_DESIGN_KSAFE(1);
(1 row)

=> select export_objects('','darkdata1_keys_super');
CREATE PROJECTION public.darkdata1_keys_super /*+basename(darkdata1_keys),createtype(P)*/
(
 key_name,
 frequency,
 data_type_guess
)
AS
 SELECT darkdata1_keys.key_name,
        darkdata1_keys.frequency,
        darkdata1_keys.data_type_guess
 FROM public.darkdata1_keys
 ORDER BY darkdata1_keys.frequency
UNSEGMENTED ALL NODES;

SELECT MARK_DESIGN_KSAFE(1);
(1 row)

以下示例将以下面一个列定义创建名为 darkdata1 的表:date_col。该语句将 partition by 子句指定为按年为数据分区。Vertica 将在创建表的过程中创建默认的超投影和伙伴实例投影:

=> CREATE FLEX TABLE darkdata1 (date_col date NOT NULL) partition by
  extract('year' from date_col);
CREATE TABLE

另请参阅