定义一个新表。
CREATE [ [GLOBAL | LOCAL] {TEMPORARY | TEMP } | UNLOGGED] TABLE [IF NOT EXISTS]
table_name (
{ column_name data_type [ COLLATE collation ] [column_constraint [ ... ] ]
[ ENCODING ( storage_directive [, ...] ) ]
| table_constraint
| LIKE source_table [ like_option ... ] }
| [ column_reference_storage_directive [, ...]
[, ... ]
] )
[ INHERITS ( parent_table [, ... ] ) ]
[ USING { MARS2 | MARS3} ]
[ WITH ( storage_parameter [=value] [, ... ] ) ]
[ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ]
[ TABLESPACE tablespace_name ]
[ DISTRIBUTED BY (column [opclass], [ ... ] )
| DISTRIBUTED RANDOMLY | DISTRIBUTED REPLICATED ]
{ --partitioned table using SUBPARTITION TEMPLATE
[ PARTITION BY partition_type (column)
{ [ SUBPARTITION BY partition_type (column1)
SUBPARTITION TEMPLATE ( template_spec ) ]
[ SUBPARTITION BY partition_type (column2)
SUBPARTITION TEMPLATE ( template_spec ) ]
[...] }
( partition_spec ) ]
} |
{ -- partitioned table without SUBPARTITION TEMPLATE
[ PARTITION BY partition_type (column)
[ SUBPARTITION BY partition_type (column1) ]
[ SUBPARTITION BY partition_type (column2) ]
[...]
( partition_spec
[ ( subpartition_spec_column1
[ ( subpartition_spec_column2
[...] ) ] ) ],
[ partition_spec
[ ( subpartition_spec_column1
[ ( subpartition_spec_column2
[...] ) ] ) ], ]
[...]
) ]
}
CREATE [ [GLOBAL | LOCAL] {TEMPORARY | TEMP} | UNLOGGED ] TABLE [IF NOT EXISTS]
table_name
OF type_name [ (
{ column_name WITH OPTIONS [ column_constraint [ ... ] ]
| table_constraint }
[, ... ]
) ]
[ WITH ( storage_parameter [=value] [, ... ] ) ]
[ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ]
[ TABLESPACE tablespace_name ]
其中 column_constraint 是:
[ CONSTRAINT constraint_name]
{ NOT NULL
| NULL
| CHECK ( expression ) [ NO INHERIT ]
| DEFAULT default_expr
| UNIQUE index_parameters
| PRIMARY KEY index_parameters
| REFERENCES reftable [ ( refcolumn ) ]
[ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ]
[ ON DELETE key_action ] [ ON UPDATE key_action ] }
[ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]
table_constraint 是:
[ CONSTRAINT constraint_name ]
{ CHECK ( expression ) [ NO INHERIT ]
| UNIQUE ( column_name [, ... ] ) index_parameters
| PRIMARY KEY ( column_name [, ... ] ) index_parameters
| FOREIGN KEY ( column_name [, ... ] )
REFERENCES reftable [ ( refcolumn [, ... ] ) ]
[ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ]
[ ON DELETE key_action ] [ ON UPDATE key_action ] }
[ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]
like_option 是:
{INCLUDING|EXCLUDING} {DEFAULTS|CONSTRAINTS|INDEXES|STORAGE|COMMENTS|ALL}
UNIQUE 和 PRIMARY KEY 中的 index_parameters 约束为:
[ WITH ( storage_parameter [=value] [, ... ] ) ]
[ USING INDEX TABLESPACE tablespace_name ]
列的 storage_directive 是:
compresstype={ZLIB|ZSTD|QUICKLZ|RLE_TYPE|NONE|MXCUSTOM}
[compresslevel={0-9}]
[blocksize={8192-2097152} ]
// 当 compresstype=MXCUSTOM,需指定具体的 encodechain
[encodechain={LZ4|ZSTD|DELTADELTA(缩放位数)|DELTAZIGZAG|GORILLA|GORILLA2|FLOATINT|FDS|AUTO}]
表的 storage_parameter 是:
appendoptimized={TRUE|FALSE}
blocksize={8192-2097152}
orientation={COLUMN|ROW}
checksum={TRUE|FALSE}
// 以下为编码链相关参数
compresstype={ZLIB|ZSTD|QUICKLZ|RLE_TYPE|NONE|MXCUSTOM}
// 当 compresstype=MXCUSTOM,需指定具体的 encodechain
encodechain={LZ4|ZSTD|DELTADELTA(缩放位数)|DELTAZIGZAG|GORILLA|GORILLA2|FLOATINT|FDS|AUTO}
/* 当 compresstype=MXCUSTOM,且 encodechain=AUTO 时,支持在表级别指定自适应编码模式:
* automode=1 表示压缩率优先,automode=2 表示速度优先
*/
automode={1|2}
compresslevel={0-9}
fillfactor={10-100}
[oids=FALSE]
// 以下为 MARS2 表相关参数
// 用于控制所有的 MARS2 表,L0 达到多少个 Run 触发合并(v4.5.0 开始支持)
sortheap_automerge_threshold={10-2048}
// 用于控制 MARS2 单表 L0 达到多少个Run 触发合并(v4.5.0 开始支持)
level0_merge_threshold={1-2048}
// 控制 MARS2 单表 L0 -> L1 升级的大小,当 L0 发生合并后结果 Run 超过这个大小将升级到 L1
*(v4.5.0 开始支持)
*/
level0_upgrade_size={1-10000}
/* 控制 MARS2 单表 L1 -> L2 升级的大小,当 L1 发生合并后结果 Run 超过这个大小将升级到 L2
*(v4.5.0 开始支持)
*/
level1_upgrade_size={1-10000}
// 控制 MARS2 表单个插入的排序内存大小,如果插入目标表是分区表,它们将共享这个大小(v4.5.0 开始支持)
sortheap_sort_mem={128-2147483647}
// 控制 MARS2 单个分区表至少分配多少排序内存(v4.5.0 开始支持)
sortheap_sort_mem_core={128-2147483647}
/* 压缩阈值。用于控制 MARS2 单表每一列的多少元组(Tuple)进行一次压缩,
* 是同一个单元中压缩的 Tuple 数上限(v5.0.0 开始支持)
*/
compress_threshold={1-100000}
// 以下为 MARS3 表相关参数(均从 v5.1.0 开始支持)
/* rowstore_size 用于控制 MARS3 表中 L0 Run 何时切换。当数据大小超过该值(单位 MB),将会切换下一个 Run;
* compress_threshold 同 MARS2;prefer_load_mode 用于指定数据在 MARS3 中的加载模式。normal 表示正常模式,
* 数据会按照行存落盘,再随着更多数据的写入逐渐转换为列存。bluk 表示批量加载模式,数据会直接在内存中转换成列存再落盘。
* 当一批插入的数据量超过 rowstore_size,会分多次转换成多个列存;
* level_size_amplifier 用于指定 Level 尺寸的放大系数
*/
compress_threshold={1-100000},mars3options='rowstore_size={8-1024},prefer_load_mode={NORMAL|BLUK},level_size_amplifier={1-1000}'
// 以下为 MARS3 表降级存储功能相关参数(均从 v5.2.0 开始支持)
/* ttl_interval 用于指定数据由热至冷的阈值,需要手动指定单位,如 "2 H",意为两小时前的数据均被定义为冷数据,会进行自动降级;
* ttl_interval 目前支持 d(天)/H(小时)单位;
* ttl_space 指对应的表空间,不存在则无法创建;
* ttl_interval、ttl_space 均需在建表时声明或在已有表上用 ALTER 语句设置。
*/
ttl_interval={1-INT_MAX},ttl_space={}
key_action 是:
ON DELETE
| ON UPDATE
| NO ACTION
| RESTRICT
| CASCADE
| SET NULL
| SET DEFAULT
partition_type 是:
LIST | RANGE
partition_specification 是:
partition_element [, ...]
partition_element 是:
DEFAULT PARTITION
name
| [PARTITION name] VALUES (list_value [,...] )
| [PARTITION name]
START ([datatype] 'start_value') [INCLUSIVE | EXCLUSIVE]
[ END ([datatype] 'end_value') [INCLUSIVE | EXCLUSIVE] ]
[ EVERY ([datatype] [number |INTERVAL] 'interval_value') ]
| [PARTITION name]
END ([datatype] 'end_value') [INCLUSIVE | EXCLUSIVE]
[ EVERY ([datatype] [number |INTERVAL] 'interval_value') ]
[ WITH ( partition_storage_parameter=value [, ... ] ) ]
[ column_reference_storage_directive [, ...] ]
[ TABLESPACE tablespace ]
其中 subpartition_spec 或 template_spec 是:
subpartition_element [, ...]
subpartition_element 是:
DEFAULT SUBPARTITION name
| [SUBPARTITION name] VALUES (list_value [,...] )
| [SUBPARTITION name]
START ([datatype] 'start_value') [INCLUSIVE | EXCLUSIVE]
[ END ([datatype] 'end_value') [INCLUSIVE | EXCLUSIVE] ]
[ EVERY ([datatype] [number |INTERVAL] 'interval_value') ]
| [SUBPARTITION name]
END ([datatype] 'end_value') [INCLUSIVE | EXCLUSIVE]
[ EVERY ([datatype] [number |INTERVAL] 'interval_value') ]
[ WITH ( partition_storage_parameter=value [, ... ] ) ]
[ column_reference_storage_directive [, ...] ]
[ TABLESPACE tablespace ]
其中分区的 partition_storage_parameter 是:
appendoptimized={TRUE|FALSE}
blocksize={8192-2097152}
orientation={COLUMN|ROW}
checksum={TRUE|FALSE}
// 以下为编码链相关参数
compresstype={ZLIB|ZSTD|QUICKLZ|RLE_TYPE|NONE|MXCUSTOM}
// 当 compresstype=MXCUSTOM,需指定具体的 encodechain
encodechain={LZ4|ZSTD|DELTADELTA(缩放位数)|DELTAZIGZAG|GORILLA|GORILLA2|FLOATINT|FDS|AUTO}
/* 当 compresstype=MXCUSTOM,且 encodechain=AUTO 时,支持在表级别指定自适应编码模式:
* automode=1 表示压缩率优先,automode=2 表示速度优先
*/
automode={1|2}
compresslevel={0-9}
fillfactor={10-100}
[oids=FALSE]
// 以下为 MARS2 表相关参数
// 用于控制所有的 MARS2 表,L0 达到多少个 Run 触发合并(v4.5.0 开始支持)
sortheap_automerge_threshold={10-2048}
// 用于控制 MARS2 单表 L0 达到多少个Run 触发合并(v4.5.0 开始支持)
level0_merge_threshold={1-2048}
// 控制 MARS2 单表 L0 -> L1 升级的大小,当 L0 发生合并后结果 Run 超过这个大小将升级到 L1
*(v4.5.0 开始支持)
*/
level0_upgrade_size={1-10000}
/* 控制 MARS2 单表 L1 -> L2 升级的大小,当 L1 发生合并后结果 Run 超过这个大小将升级到 L2
*(v4.5.0 开始支持)
*/
level1_upgrade_size={1-10000}
// 控制 MARS2 表单个插入的排序内存大小,如果插入目标表是分区表,它们将共享这个大小(v4.5.0 开始支持)
sortheap_sort_mem={128-2147483647}
// 控制 MARS2 单个分区表至少分配多少排序内存(v4.5.0 开始支持)
sortheap_sort_mem_core={128-2147483647}
/* 压缩阈值。用于控制 MARS2 单表每一列的多少元组(Tuple)进行一次压缩,
* 是同一个单元中压缩的 Tuple 数上限(v5.0.0 开始支持)
*/
compress_threshold={1-100000}
// 以下为 MARS3 表相关参数(均从 v5.1.0 开始支持)
/* rowstore_size 用于控制 MARS3 表中 L0 Run 何时切换。当数据大小超过该值(单位 MB),将会切换下一个 Run;
* compress_threshold 同 MARS2;prefer_load_mode 用于指定数据在 MARS3 中的加载模式。normal 表示正常模式,
* 数据会按照行存落盘,再随着更多数据的写入逐渐转换为列存。bluk 表示批量加载模式,数据会直接在内存中转换成列存再落盘。
* 当一批插入的数据量超过 rowstore_size,会分多次转换成多个列存;
* level_size_amplifier 用于指定 Level 尺寸的放大系数
*/
compress_threshold={1-100000},mars3options='rowstore_size={8-1024},prefer_load_mode={NORMAL|BLUK},level_size_amplifier={1-1000}'
// 以下为 MARS3 表降级存储功能相关参数(均从 v5.2.0 开始支持)
/* ttl_interval 用于指定数据由热至冷的阈值,需要手动指定单位,如 "2 H",意为两小时前的数据均被定义为冷数据,会进行自动降级;
* ttl_interval 目前支持 d(天)/H(小时)单位;
* ttl_space 指对应的表空间,不存在则无法创建;
* ttl_interval、ttl_space 均需在建表时声明或在已有表上用 ALTER 语句设置。
*/
ttl_interval={1-INT_MAX},ttl_space={}
注意!
MARS2(v4.5.0 及之后)、MARS3 存储引擎(v5.1.0 及之后)参数详解请点击 这里。
CREATE TABLE 在当前数据库中创建一个最初为空的表。 执行命令的用户拥有该表。
为了能够创建表,您必须分别对所有列类型或 OF 子句中的类型具有 USAGE 特权。
如果指定模式名称,YMatrix 将在指定的模式中创建表。否则,YMatrix 将在当前模式中创建表。临时表存在于特殊的模式中,因此在创建临时表时不能指定模式名称。表名称必须与同一模式中的任何其他表,外部表,序列,索引,视图或外部表的名称不同。
CREATE TABLE 还会自动创建一个数据类型,该数据类型表示与表的一行相对应的复合类型。 因此,表不能与同一模式中的任何现有数据类型具有相同的名称。
可选的约束子句指定新行或更新行必须满足的条件才能成功执行插入或更新操作。约束是一个 SQL 对象,可以通过多种方式帮助定义表中的有效值集。约束适用于表,而不适用于分区。您不能将约束添加到分区或子分区。
引用完整性约束(外键)被接受但不强制执行。 该信息保留在系统 catalog 中,否则将被忽略。
有两种定义约束的方法:表约束和列约束。列约束被定义为列定义的一部分。表约束定义不与特定列绑定,并且可以包含多个列。每个列约束也可以写为表约束。当约束仅影响一列时,使用列约束只是一种符号上的方便。
创建表时,还有一个附加子句来声明 YMatrix 数据库分发策略。 如果未提供 DISTRIBUTED BY,DISTRIBUTED RANDOMLY 或 DISTRIBUTED REPLICATED 子句, 则 YMatrix 数据库将通过使用 PRIMARY KEY(如果表具有一个)或表的第一列作为分发键,向该表分配哈希分发策略。几何或用户定义数据类型的列不符合 YMatrix 分布键列的要求。 如果表中没有符合条件的数据类型的列,则将根据轮询或随机分布来分配行。为了确保数据在 YMatrix 数据库系统中的均匀分配,您希望选择一个对于每个记录都是唯一的分配键,或者如果不可能,则选择 DISTRIBUTED RANDOMLY。
如果提供了 DISTRIBUTED REPLICATED 子句,则 YMatrix 数据库会将表的所有行分配给 YMatrix 数据库系统中的所有 Segment。 如果用户定义的函数必须在 Segment 上执行,并且这些函数需要访问表的所有行,则可以使用此选项。 复制函数还可以用于防止表的 Broadcast Motions,从而提高查询性能。 DISTRIBUTED REPLICATED 子句不能与 PARTITION BY 子句或 INHERITS 子句一起使用。 复制的表也不能被另一个表继承。 隐藏的系统列(ctid,cmin,cmax,xmin, xmax 和 gp_segment_id)无法在复制表的用户查询中引用,因为它们没有单一的,无歧义的值。
通过 PARTITION BY 子句,您可以将表分为多个子表(或部分),这些子表一起构成父表并共享其模式。 尽管子表作为独立表存在,但是 YMatrix 数据库以重要方式限制了它们的使用。在内部,分区被实现为继承的一种特殊形式。每个子表分区都是根据不同的 CHECK 约束创建的,该约束根据一些定义条件限制表可以包含的数据。查询优化器还使用 CHECK 约束来确定要扫描哪些表分区以满足给定的查询谓词。 这些分区约束由 YMatrix 数据库自动管理。
YMatrix v5.0.0 开始支持建表时指定自定义编码链算法进行压缩。详见使用压缩
GLOBAL | LOCAL
TEMPORARY | TEMP
UNLOGGED
table_name
OF type_name
column_name
data_type
COLLATE collation
DEFAULT default_expr
ENCODING ( storage_directive [, ...] )
INHERITS ( parent_table [, …])
LIKE source_table like_option ...]
CONSTRAINT constraint_name
NULL | NOT NULL
CHECK (expression) [ NO INHERIT ]
UNIQUE ( column_constraint )
UNIQUE ( column_name [, ... ] ) ( table_constraint )
PRIMARY KEY ( column constraint )
PRIMARY KEY ( column_name [, ... ] ) ( table constraint )
REFERENCES reftable [ ( refcolumn ) ]
[ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ]
[ON DELETE | ON UPDATE] [key_action]
FOREIGN KEY (column_name [, ...])
DEFERRABLE
NOT DEFERRABLE
INITIALLY IMMEDIATE
INITIALLY DEFERRED
WITH ( storage_parameter=value )
ON COMMIT
TABLESPACE tablespace
USING INDEX TABLESPACE tablespace
DISTRIBUTED BY (column [opclass], [ ... ] )
DISTRIBUTED RANDOMLY
DISTRIBUTED REPLICATED
如果参数的值设置为 on,则 YMatrix 数据库遵循以下规则:
DISTRIBUTED REPLICATED 子句将整个表复制到所有 YMatrix 数据库 Segment 实例。 当函数需要访问表中的所有行或需要通过阻止 Broadcast Motion 来提高查询性能时,必须在 Segment 上执行用户定义的函数时可以使用它。
PARTITION BY
声明用于对表进行分区的一列或多列。
创建分区表时,YMatrix 数据库使用指定的表名创建根分区表(根分区)。 YMatrix 数据库还会根据您指定的分区选项创建表,子表的层次结构,这些表是子分区。 YMatrix 数据库 pg_partition* 系统视图包含有关子分区表的信息。
对于每个分区级别(表的每个层次结构级别),一个分区表最多可以有 32,767 个分区。
注意:YMatrix 数据库将分区表数据存储在叶子表中,叶子表是子表层次结构中的最低层表,供分区表使用。
SUBPARTITION BY
SUBPARTITION TEMPLATE
在名为 baby 的模式中创建一个名为 rank 的表, 并使用 rank,gender 和 year 列分发数据:
CREATE TABLE baby.rank (id int, rank int, year smallint,
gender char(1), count int ) DISTRIBUTED BY (rank, gender,
year);
创建表 files 和表分配器(默认情况下,主键将用作 YMatrix 分布键):
CREATE TABLE films (
code char(5) CONSTRAINT firstkey PRIMARY KEY,
title varchar(40) NOT NULL,
did integer NOT NULL,
date_prod date,
kind varchar(10),
len interval hour to minute
);
CREATE TABLE distributors (
did integer PRIMARY KEY DEFAULT nextval('serial'),
name varchar(40) NOT NULL CHECK (name <> '')
);
创建一个 gzip 压缩的,追加优化的表:
CREATE TABLE sales (txn_id int, qty int, date date)
WITH (appendoptimized=true, compresslevel=5)
DISTRIBUTED BY (txn_id);
创建一个简单的,单级别的分区表:
CREATE TABLE sales (id int, year int, qtr int, c_rank int, code char(1), region text)
DISTRIBUTED BY (id)
PARTITION BY LIST (code)
( PARTITION sales VALUES ('S'),
PARTITION returns VALUES ('R')
);
不使用 SUBPARTITION TEMPLATE 子句创建三级分区表:
CREATE TABLE sales (id int, year int, qtr int, c_rank int, code char(1), region text)
DISTRIBUTED BY (id)
PARTITION BY LIST (code)
SUBPARTITION BY RANGE (c_rank)
SUBPARTITION by LIST (region)
( PARTITION sales VALUES ('S')
( SUBPARTITION cr1 START (1) END (2)
( SUBPARTITION ca VALUES ('CA') ),
SUBPARTITION cr2 START (3) END (4)
( SUBPARTITION ca VALUES ('CA') ) ),
PARTITION returns VALUES ('R')
( SUBPARTITION cr1 START (1) END (2)
( SUBPARTITION ca VALUES ('CA') ),
SUBPARTITION cr2 START (3) END (4)
( SUBPARTITION ca VALUES ('CA') ) )
);
使用 SUBPARTITION TEMPLATE 子句创建与前例相同的分区表:
CREATE TABLE sales1 (id int, year int, qtr int, c_rank int, code char(1), region text)
DISTRIBUTED BY (id)
PARTITION BY LIST (code)
SUBPARTITION BY RANGE (c_rank)
SUBPARTITION TEMPLATE (
SUBPARTITION cr1 START (1) END (2),
SUBPARTITION cr2 START (3) END (4) )
SUBPARTITION BY LIST (region)
SUBPARTITION TEMPLATE (
SUBPARTITION ca VALUES ('CA') )
( PARTITION sales VALUES ('S'),
PARTITION returns VALUES ('R')
) ;
创建一张三级分区表,并在每级使用子分区模板和默认分区:
CREATE TABLE sales (id int, year int, qtr int, c_rank int, code char(1), region text)
DISTRIBUTED BY (id)
PARTITION BY RANGE (year)
SUBPARTITION BY RANGE (qtr)
SUBPARTITION TEMPLATE (
START (1) END (5) EVERY (1),
DEFAULT SUBPARTITION bad_qtr )
SUBPARTITION BY LIST (region)
SUBPARTITION TEMPLATE (
SUBPARTITION usa VALUES ('usa'),
SUBPARTITION europe VALUES ('europe'),
SUBPARTITION asia VALUES ('asia'),
DEFAULT SUBPARTITION other_regions)
( START (2009) END (2011) EVERY (1),
DEFAULT PARTITION outlying_years);
指定新分区的 SEGMENT_SET 对象:
## 创建 SEGMENT_SET 对象 ss1
CREATE SEGMENT_SET ss1 SEGMENTS('0,2');
## 创建 t 表
CREATE TABLE t(a int, b int) DISTRIBUTED BY(a) PARTITION BY RANGE(b) (DEFAULT PARTITION others SEGMENT_SET ss1);
## 指定新分区的 SEGMENT_SET 对象
CREATE TABLE t_part_manual PARTITION OF t FOR VALUES FROM (3) TO (6) SEGMENT_SET ss1;
创建 MARS2 表。MARS2 表依赖 matrixts
扩展,在建表前,首先需要你在使用该存储引擎的数据库中创建扩展。
CREATE EXTENSION matrixts;
创建一张可进行自适应编码压缩的表。详见使用压缩。
CREATE TABLE t (
f1 int8
, f2 int8
)
USING MARS2
WITH(
compresstype=mxcustom
);
创建一张既指定表级别,又指定列级别压缩的表。列级压缩的指定要优先于表级(列指定 ENCODING(compresstype=none)/ENCODING(minmax)
例外)。详见使用压缩。
CREATE TABLE t (
f1 int8 ENCODING(compresstype=lz4)
, f2 int8
)
USING MARS2
WITH(
compresstype=mxcustom
, encodechain=auto
);
CREATE INDEX idx_mars2 ON t USING mars2_btree(f1);
注意!
matrixts
扩展为数据库级别,一个数据库里面创建一次即可,无需重复创建。
CREATE TABLE disk_mars2(
time timestamp with time zone,
tag_id int,
read float,
write float
)
USING MARS2
WITH (compresstype=zstd, compresslevel=3)
DISTRIBUTED BY (tag_id);
CREATE INDEX ON disk_mars2 USING mars2_btree(time,tag_id);
创建一个 MARS3 表。MARS3 表同样依赖 matrixts
扩展,在建表前,首先需要你在使用该存储引擎的数据库中创建扩展。
CREATE EXTENSION matrixts;
CREATE TABLE t(
time timestamp with time zone,
tag_id int,
i4 int4,
i8 int8
)
USING MARS3
WITH (compresstype=zstd, compresslevel=3,compress_threshold=1200,
mars3options='rowstore_size=64,prefer_load_mode=normal,level_size_amplifier=8')
DISTRIBUTED BY (tag_id)
ORDER BY (time, tag_id);
CREATE TABLE 命令符合 SQL 标准,但以下情况除外:
Temporary Tables — 在 SQL 标准中,临时表仅定义一次,并在每个需要它们的会话中自动存在(从空内容开始)。 相反,YMatrix 数据库要求每个会话为要使用的每个临时表发出自己的 CREATE TEMPORARY TABLE 命令。 这允许不同的会话出于不同的目的而使用相同的临时表名称,而标准的方法将给定临时表名称的所有实例约束为具有相同的表结构。
全局和本地临时表之间的标准区别不在 YMatrix 数据库中。 YMatrix 数据库将在临时表声明中接受 GLOBAL 和 LOCAL 关键字,但它们无效且已弃用。
如果省略 ON COMMIT 子句,则 SQL 标准将默认行为指定为 ON COMMIT DELETE ROWS。 但是,YMatrix 数据库中的默认行为是 ON COMMIT PRESERVE ROWS。 SQL 标准中不存在 ON COMMIT DROP 选项。
Column Check Constraints — SQL 标准说,CHECK 列约束只能引用它们所适用的列。 只有 CHECK 表约束可以引用多个列。 YMatrix 数据库不强制执行此限制;它对待列和表检查约束都一样。
NULL Constraint — NULL 约束是对 SQL 标准的 YMatrix 数据库扩展, 为了与某些其他数据库系统兼容(以及对称的 NOT NULL 约束)。 由于它是任何列的默认值,因此不需要它的存在。
Inheritance — 通过 INHERITS 子句的多重继承是 YMatrix 数据库语言的扩展。 SQL:1999 及更高版本使用不同的语法和语义定义了单个继承。 YMatrix 数据库尚不支持 SQL:1999 样式的继承。
Partitioning — 通过 PARTITION BY 子句进行的表分区是 YMatrix 数据库语言的扩展。
Zero-column tables — YMatrix 数据库允许创建不包含任何列的表(例如 CREATE TABLE foo();)。 这是 SQL 标准的扩展,不允许使用零列表。 零列表本身并没有什么用,但是不允许使用零列表在 ALTER TABLE DROP COLUMN 时会产生奇怪的特殊情况, 因此 YMatrix 决定忽略此规范限制。
LIKE — 尽管 SQL 标准中存在 LIKE 子句, 但 YMatrix 数据库接受的许多选项都不在该标准中,并且 YMatrix 数据库并未实现该标准的某些选项。
WITH clause — WITH 子句是 YMatrix 数据库扩展。 存储参数和 OID 都不在标准中。
Tablespaces — 表空间的 YMatrix 数据库概念不是 SQL 标准的一部分。 子句 TABLESPACE 和 USING INDEX TABLESPACE 是扩展。
Data Distribution — 并行或分布式数据库的 YMatrix 数据库概念不是 SQL 标准的一部分。 DISTRIBUTED 子句是扩展。