Определяет новую таблицу.
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:
[ 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} ]
// When compressiontype=MXCUSTOM, you need to specify the specific 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}
// The following are the relevant parameters of the encoding chain
compresstype={ZLIB|ZSTD|QUICKLZ|RLE_TYPE|NONE|MXCUSTOM}
// When compressiontype=MXCUSTOM, you need to specify the specific encodechain
encodechain={LZ4|ZSTD|DELTADELTA(缩放位数)|DELTAZIGZAG|GORILLA|GORILLA2|FLOATINT|FDS|AUTO}
/* When compresstype=MXCUSTOM and encodechain=AUTO, adaptive encoding mode can be specified at the table level:
* automode=1 means compression rate is preferred, automode=2 means speed is preferred
*/
automode={1|2}
compresslevel={0-9}
fillfactor={10-100}
[oids=FALSE]
// The following are the parameters related to the MARS2 table
// Used to control all MARS2 tables, how many Runs can be triggered by L0 (v4.5.0 starts to support)
sortheap_automerge_threshold={10-2048}
// Used to control how many Runs are reached in MARS2 single table L0 to trigger merges (v4.5.0 is supported)
level0_merge_threshold={1-2048}
// Control the size of the MARS2 single table L0 -> L1 upgrade. When L0 merges, the result will be upgraded to L1 if it exceeds this size.
*(v4.5.0 is supported)
*/
level0_upgrade_size={1-10000}
/* Control the size of the MARS2 single table L1 -> L2 upgrade. When the result of the L1 merge exceeds this size, it will be upgraded to L2.
*(v4.5.0 is supported)
*/
level1_upgrade_size={1-10000}
// Controls the sorted memory size of MARS2 forms individual inserts, and if the insert target table is a partitioned table, they will share this size (v4.5.0 starts to support)
sortheap_sort_mem={128-2147483647}
// Controls at least how much sorted memory is allocated for a single MARS2 partition table (v4.5.0 is supported)
sortheap_sort_mem_core={128-2147483647}
/* Compression threshold. Used to control how many tuples in each column of the MARS2 single table are compressed at one time.
* It is the upper limit of the number of compressed Tuples in the same unit (v5.0.0 starts to support)
*/
compress_threshold={1-100000}
// The following are the parameters related to the MARS3 table (all supported starting from v5.1.0)
/* rowstore_size is used to control when L0 Run switches in MARS3 tables. When the data size exceeds this value (in MB), it will switch to the next Run;
* compress_threshold is same as MARS2; prefer_load_mode is used to specify the loading mode of data in MARS3. normal means normal mode,
* The data will be stored in the disk according to the row, and then gradually converted into column storage as more data is written. bluk represents batch loading mode, and the data will be converted into column storage and then dropped into disk.
* When the amount of data inserted in a batch exceeds rowstore_size, it will be converted into multiple columns in multiple times;
* level_size_amplifier The enlargement coefficient used to specify the Level size
*/
compress_threshold={1-100000},mars3options='rowstore_size={8-1024},prefer_load_mode={NORMAL|BLUK},level_size_amplifier={1-1000}'
// The following are the parameters related to the MARS3 table downgrade storage function (all supported starting from v5.2.0)
/* ttl_interval Used to specify the threshold for data transition from hot to cold. The unit must be specified manually, such as “2 H,” which means that data from two hours ago is defined as cold data and will be automatically downgraded;
* ttl_interval currently supports d (days)/H (hours) units;
* ttl_space referers to the corresponding tablespace, and cannot be created if it does not exist;
* ttl_interval and ttl_space both need to be declared when creating tables or set with ALTER statements on existing tables.
*/
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}
// The following are the relevant parameters of the encoding chain
compresstype={ZLIB|ZSTD|QUICKLZ|RLE_TYPE|NONE|MXCUSTOM}
// When compressiontype=MXCUSTOM, you need to specify the specific encodechain
encodechain={LZ4|ZSTD|DELTADELTA(缩放位数)|DELTAZIGZAG|GORILLA|GORILLA2|FLOATINT|FDS|AUTO}
/* 当 compresstype=MXCUSTOM,且 encodechain=AUTO 时,支持在表级别指定自适应编码模式:
* automode=1 means compression rate is preferred, automode=2 means speed is preferred
*/
automode={1|2}
compresslevel={0-9}
fillfactor={10-100}
[oids=FALSE]
// The following are the parameters related to the MARS2 table
// Used to control all MARS2 tables, how many Runs can be triggered by L0 (v4.5.0 starts to support)
sortheap_automerge_threshold={10-2048}
// Used to control how many Runs are reached in MARS2 single table L0 to trigger merges (v4.5.0 is supported)
level0_merge_threshold={1-2048}
// Control the size of the MARS2 single table L0 -> L1 upgrade. When L0 merges, the result will be upgraded to L1 if it exceeds this size.
*(v4.5.0 is supported)
*/
level0_upgrade_size={1-10000}
/* Control the size of the MARS2 single table L1 -> L2 upgrade. When the result of the L1 merge exceeds this size, it will be upgraded to L2.
*(v4.5.0 is supported)
*/
level1_upgrade_size={1-10000}
// Controls the sorted memory size of MARS2 forms individual inserts, and if the insert target table is a partitioned table, they will share this size (v4.5.0 starts to support)
sortheap_sort_mem={128-2147483647}
// Controls at least how much sorted memory is allocated for a single MARS2 partition table (v4.5.0 is supported)
sortheap_sort_mem_core={128-2147483647}
/* Compression threshold. Used to control how many tuples in each column of the MARS2 single table are compressed at one time.
* It is the upper limit of the number of compressed Tuples in the same unit (v5.0.0 starts to support)
*/
compress_threshold={1-100000}
// The following are the parameters related to the MARS3 table (all supported starting from v5.1.0)
/* rowstore_size Used to control when L0 Run in the MARS3 table switches. When the data size exceeds this value (in MB), it will switch to the next Run;
* compress_threshold is same as MARS2; prefer_load_mode is used to specify the loading mode of data in MARS3. normal means normal mode,
* The data will be stored in the disk according to the row, and then gradually converted into column storage as more data is written. bluk represents batch loading mode, and the data will be converted into column storage and then dropped into disk.
* When the amount of data inserted in a batch exceeds rowstore_size, it will be converted into multiple columns in multiple times;
* level_size_amplifier The enlargement coefficient used to specify the Level size
*/
compress_threshold={1-100000},mars3options='rowstore_size={8-1024},prefer_load_mode={NORMAL|BLUK},level_size_amplifier={1-1000}'
// The following are the parameters related to the MARS3 table downgrade storage function (all supported starting from v5.2.0)
/* ttl_interval Used to specify the threshold for data transition from hot to cold. The unit must be specified manually, such as “2 H,” which means that data from two hours ago is defined as cold data and will be automatically downgraded;
* ttl_interval currently supports d (days)/H (hours) units;
* ttl_space referers to the corresponding tablespace, and cannot be created if it does not exist;
* ttl_interval and ttl_space both need to be declared when creating tables or set with ALTER statements on existing tables.
*/
ttl_interval={1-INT_MAX},ttl_space={}
Примечание!
Подробную информацию о параметрах механизмов хранения MARS2 (v4.5.0 и выше) и MARS3 (v5.1.0 и выше) см. здесь.
Команда CREATE TABLE создает изначально пустую таблицу в текущей базе данных. Владельцем таблицы становится пользователь, выполняющий команду.
Чтобы иметь возможность создать таблицу, необходимо обладать привилегией USAGE на все типы столбцов или типы, указанные в предложении OF.
Если указано имя схемы, YMatrix создаст таблицу в указанной схеме. В противном случае таблица будет создана в текущей схеме. Временные таблицы существуют в специальной схеме, поэтому при создании временной таблицы нельзя указывать имя схемы. Имя таблицы должно отличаться от имён всех других таблиц, внешних таблиц, последовательностей, индексов, представлений и внешних таблиц в одной и той же схеме.
CREATE TABLE также автоматически создаёт тип данных, представляющий составной тип, соответствующий строке таблицы. Следовательно, таблица не может иметь то же имя, что и любой существующий тип данных в этой схеме.
Необязательные предложения CONSTRAINT определяют условия, которым должны удовлетворять новые или обновлённые строки для успешного выполнения операций вставки или обновления. Ограничение — это объект SQL, который помогает определить допустимый набор значений в таблице различными способами. Ограничения применяются к таблицам, а не к партициям. Невозможно добавлять ограничения к партициям или подпартициям.
Ограничения ссылочной целостности (внешние ключи) принимаются, но не проверяются. Эта информация сохраняется в системном каталоге и далее игнорируется.
Существует два способа определения ограничений: ограничения таблицы и ограничения столбца. Ограничения столбца определяются как часть определения столбца. Ограничения таблицы не привязаны к конкретным столбцам и могут включать несколько столбцов. Каждое ограничение столбца можно также записать как ограничение таблицы. Если ограничение затрагивает только один столбец, использование ограничения столбца является вопросом удобства.
При создании таблицы существует дополнительное предложение для объявления стратегии распределения базы данных YMatrix. Если предложения DISTRIBUTED BY, DISTRIBUTED RANDOMLY или DISTRIBUTED REPLICATED не указаны, база данных YMatrix назначит таблице стратегию хэш-распределения, используя первичный ключ (если он есть) или первый столбец таблицы в качестве ключа распределения. Столбцы геометрических или пользовательских типов данных не подходят для использования в качестве ключей распределения YMatrix. Если в таблице нет столбцов подходящих типов данных, строки будут распределяться по принципу round-robin или случайным образом. Чтобы обеспечить равномерное распределение данных по системе базы данных YMatrix, следует выбирать ключ распределения, уникальный для каждой записи, или, если это невозможно, использовать DISTRIBUTED RANDOMLY.
Если указано предложение DISTRIBUTED REPLICATED, база данных YMatrix будет распределять все строки таблицы на все экземпляры Segments в системе YMatrix. Этот параметр можно использовать, когда пользовательские функции должны выполняться на Segments и требуют доступа ко всем строкам таблицы. Реплицированные таблицы также могут использоваться для предотвращения 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 теперь поддерживает указание пользовательского алгоритма цепочки кодирования для сжатия при создании таблиц. Подробнее см. Using Compression.
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 [, …])
CONSTRAINT constraint_name
NULL | NOT NULL
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
Если ограничение может откладываться, это предложение задаёт время проверки по умолчанию. Если ограничение INITIALLY IMMEDIATE, оно проверяется после каждого оператора. Это значение по умолчанию. Если ограничение INITIALLY DEFERRED, проверка выполняется только в конце транзакции. Время проверки ограничения можно изменить с помощью команды SET CONSTRAINTS.
WITH ( storage_parameter=value )
Предложение WITH может задавать параметры хранения для таблиц и индексов, связанных с ограничениями UNIQUE или PRIMARY. Обратите внимание, что вы также можете задать параметры хранения для конкретных партиций или подпартиций, указав предложение WITH в спецификации партиции. Настройки самого низкого уровня имеют приоритет.
Значения по умолчанию для некоторых параметров хранения таблиц можно задать с помощью параметра конфигурации сервера gp_default_storage_options.
Доступны следующие параметры хранения:
Сжатие цепочки кодирования, указанное в предложении WITH, применяется на уровне таблицы.
ON COMMIT
TABLESPACE tablespace
USING INDEX TABLESPACE tablespace
DISTRIBUTED BY (column [opclass], [ ... ] )
DISTRIBUTED RANDOMLY
DISTRIBUTED REPLICATED
Если параметр установлен в on, база данных YMatrix применяет следующие правила:
Предложение DISTRIBUTED REPLICATED реплицирует всю таблицу на все экземпляры Segments базы данных YMatrix. Его можно использовать, когда функции нуждаются в доступе ко всем строкам таблицы или когда необходимо повысить производительность запросов за счёт исключения Broadcast Motion. Особенно актуально при выполнении пользовательских функций на Segments.
PARTITION BY
SUBPARTITION BY
SUBPARTITION TEMPLATE
Создать таблицу с именем rank в схеме baby и распределить данные с использованием столбцов rank, gender и year:
CREATE TABLE baby.rank (id int, rank int, year smallint,
gender char(1), count int ) DISTRIBUTED BY (rank, gender,
year);
Создать таблицы files и allocators (по умолчанию первичный ключ будет использоваться в качестве ключа распределения 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')
) ;
Создать трёхуровневую секционированную таблицу с использованием шаблона подсекций и секции по умолчанию на каждом уровне: CODE_BLOCk_20 Указать объект SEGMENT_SET для новой секции:
## Create SEGMENT_SET object ss1
CREATE SEGMENT_SET ss1 SEGMENTS('0,2');
## Create a t table
CREATE TABLE t(a int, b int) DISTRIBUTED BY(a) PARTITION BY RANGE(b) (DEFAULT PARTITION others SEGMENT_SET ss1);
## Specify the SEGMENT_SET object for the new partition
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, за исключением следующих случаев:
Временные таблицы — в стандарте SQL временные таблицы определяются только один раз и автоматически существуют в каждой сессии, где они требуются (начиная с пустого содержимого). Вместо этого база данных YMatrix требует, чтобы каждая сессия выполняла собственную команду CREATE TEMPORARY TABLE для каждой временной таблицы, которую она собирается использовать. Это позволяет разным сессиям использовать одно и то же имя временной таблицы для разных целей, тогда как подход стандарта требует, чтобы все экземпляры заданного имени временной таблицы имели одну и ту же структуру.
Различие между глобальными и локальными временными таблицами по стандарту в базе данных YMatrix отсутствует. База данных YMatrix принимает ключевые слова GLOBAL и LOCAL в объявлении временной таблицы, но они являются недействительными и устаревшими.
Если предложение ON COMMIT опущено, стандарт SQL определяет поведение по умолчанию как ON COMMIT DELETE ROWS. Однако поведение по умолчанию в базе данных YMatrix — ON COMMIT PRESERVE ROWS. Опция ON COMMIT DROP отсутствует в стандарте SQL.
Ограничения CHECK на уровне столбца — согласно стандарту SQL, ограничения CHECK на уровне столбца могут ссылаться только на тот столбец, к которому они применяются. Только ограничения CHECK на уровне таблицы могут ссылаться на несколько столбцов. База данных YMatrix не соблюдает это ограничение; она рассматривает ограничения CHECK на уровне столбца и таблицы одинаково.
Ограничение NULL — ограничение NULL является расширением базы данных YMatrix по отношению к стандарту SQL, предназначенным для совместимости с некоторыми другими системами баз данных (и симметричным ограничению NOT NULL). Поскольку это значение по умолчанию для любого столбца, его существование не обязательно.
Наследование — множественное наследование через предложение INHERITS является расширением языка базы данных YMatrix. SQL:1999 и более поздние версии определяют одиночное наследование с использованием другого синтаксиса и семантики. База данных YMatrix пока не поддерживает наследование по стилю SQL:1999.
Секционирование — секционирование таблиц через предложение PARTITION BY является расширением языка базы данных YMatrix.
Таблицы без столбцов — база данных YMatrix позволяет создавать таблицы, не содержащие ни одного столбца (например, CREATE TABLE foo();). Это расширение стандарта SQL, который не допускает использование пустых списков. Сама по себе такая таблица мало полезна, однако её наличие позволяет избежать странных особых случаев при выполнении ALTER TABLE DROP COLUMN, поэтому YMatrix решила проигнорировать это ограничение спецификации.
LIKE — хотя в стандарте SQL существуют предложения LIKE, многие параметры, принимаемые базой данных YMatrix, отсутствуют в стандарте, а некоторые параметры YMatrix не реализуют стандарт.
WITH — предложение WITH является расширением базы данных YMatrix. Параметры хранения и OID не входят в стандарт.
Табличные пространства — концепция табличных пространств в базе данных YMatrix не является частью стандарта SQL. Предложения TABLESPACE и USING INDEX TABLESPACE являются расширениями.
Распределение данных — концепция параллельных или распределённых баз данных в YMatrix не является частью стандарта SQL. Предложение DISTRIBUTED является расширением.