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