跳到主要内容
版本:latest

数据定义语言

用来定义数据库结构和组织。

CREATE DATABASE

CREATE DATABASE [IF NOT EXISTS] db_name [WITH db_options];

db_options:
db_option ...

db_option: {
TTL duration
| SHARD value
| VNODE_DURATION duration
| REPLICA value
| PRECISION {'ms' | 'us' | 'ns'}
| MAX_MEMCACHE_SIZE bytesnum
| MEMCACHE_PARTITIONS value
| WAL_MAX_FILE_SIZE bytesnum
| WAL_SYNC bool
| STRICT_WRITE bool
| MAX_CACHE_READERS value
}
选项描述
TTLDuration。数据过期时间,默认为无限 INF
SHARD表示分片个数,默认:1
VNODE_DURATIONDuration。数据在 SHARD 中的时间窗口长度,默认 '1y'
REPLICA数据在集群中的复本数,默认为 1。(备注:副本数必须小于且等于集群中 tskv 节点的数据)。
PRECISION数据库的时间戳精度,默认为 ns。支持的单位:msusns
MAX_MEMCACHE_SIZE数据库的最大缓存大小,默认为 '512MiB',可使用配置文件指定每次创建时的默认值。
MEMCACHE_PARTITIONS数据库的缓存分区数,默认为 1,可使用配置文件指定每次创建时的默认值。
WAL_MAX_FILE_SIZE单个 WAL 文件的最大大小,默认为 '1GiB',可使用配置文件指定每次创建时的默认值。
WAL_SYNCWAL 是否每次写入同步,默认为 'false',可使用配置文件指定每次创建时的默认值。
STRICT_WRITE是否开启严格写,即写入是否需要提前创建表,默认为 'false',可使用配置文件指定每次创建时的默认值。
MAX_CACHE_READERSvnode的最大缓存的tsm reader,默认为 32,可使用配置文件指定每次创建时的默认值。

Duration 格式

'inf'为无限大的 Duration, 例如 create database oceanic_station with ttl 'inf'
'nanos' | 'nsec' | 'ns' 为纳秒, 例如 with ttl '10ns'
'usec' | 'us' 为微秒, 例如 with ttl '300us'
'millis' | 'msec' | 'ms' 为毫秒, 例如 with ttl '90ms'
'seconds' | 'second' | 'secs' | 'sec' | 's' 为秒, 例如 with ttl '30s'
'minutes' | 'minute' | 'min' | 'mins' | 'm' 为分钟, 例如 with ttl '7000m'
'hours' | 'hour' | 'hr' | 'hrs' | 'h' 为小时, 例如 with ttl '5h'
'days' | 'day' | 'd' 为天, 例如 with ttl '365d'
'weeks' | 'week' | 'w' 为周, 例如 with ttl '52w'
'months' | 'month' | 'M' 为月, 例如 with ttl '12M'
'years' | 'year' | 'y' 为年, 例如 with ttl '1y'

BytesNum

'512MiB'、'1GiB'、'1KiB'、'1TiB'、'1PiB'、'1EiB'、'1ZiB'、'1YiB', 为二进制单位, 1M = 1024K
'512MB'、'1GB'、'1KB'、'1TB'、'1PB'、'1EB'、'1ZB'、'1YB',为十进制单位, 1M = 1000K
查看 CREATE DATABASE 示例

创建一个数据库,且保留策略为无限长。

CREATE DATABASE oceanic_station;

创建一个数据库,指定参数。

create database oceanic_station with ttl 'inf' shard 6 vnode_duration '2y1M' replica 1 precision 'us' max_memcache_size '128MiB' memcache_partitions 10 wal_max_file_size '300M' wal_sync 'true' strict_write 'true' max_cache_readers 100;

创建一个数据库,设置过期时间为 180 天,且每个时间窗口为 7 天。

数据过期策略请参考 分片规则

CREATE DATABASE oceanic_station WITH TTL '180d' SHARD 1 VNODE_DURATION '7d';

设置 Vnode 复制因子数量。

CREATE DATABASE oceanic_station WITH SHARD 2;

设置时间戳精度。

时间精度只允许在创建数据库时指定,且后续不能更改。

CREATE DATABASE oceanic_station WITH PRECISION 'ms';

CREATE TABLE

CREATE TABLE 使用 CnosDB TSKV 存储数据,支持部分 SQL 数据类型进行存储,如下:

  • BIGINT

  • BIGINT UNSIGNED

  • BOOLEAN

  • TIMESTAMP

  • STRING

  • DOUBLE

此外,CnosDB 表的结构需要遵循一定的规范,请参考 基础概念

CREATE TABLE [IF NOT EXISTS] tb_name
(field_definition [, field_definition ] ... [, TAGS(tg_name [, tg_name] ...)]);

field_definition:
column_name data_type [field_codec_type]

field_codec_type:
CODEC(code_type)
查看 CREATE TABLE 示例

创建一个表。

创建表时 time 字段可以省略。

CREATE TABLE air(
visibility DOUBLE,
temperature DOUBLE,
pressure DOUBLE,
TAGS(station)
);

创建一个表,并指定压缩算法。

指定 visibility 的压缩算法为 QUANTILEtemperature 不压缩,pressure 使用默认压缩算法。

不同的数据类型可以指定不同的压缩算法,支持列表请参考 压缩算法

CREATE TABLE air(
visibility DOUBLE CODEC(QUANTILE),
temperature DOUBLE CODEC(NULL),
pressure DOUBLE,
TAGS(station)
);

如果需要对创建之后的表进行其他操作,请参考 INSERTALTER TABLEDROP TABLE

CREATE EXTERNAL TABLE

外部表是只读的,不能执行 DML 操作。

-- Column definitions can not be specified for PARQUET files

CREATE EXTERNAL TABLE [ IF NOT EXISTS ] tb_name
( field_definition [, field_definition] ... ) tb_option;

field_definition:
column_name data_type [ NULL ]

tb_option: {
STORED AS { PARQUET | NDJSON | CSV | AVRO }
| [ WITH HEADER ROW ]
| [ DELIMITER 'a_single_char' ]
| [ PARTITIONED BY ( column_name, [, ... ] ) ]
| LOCATION '<file>'
}
选项描述
STORED AS指定文件的格式,支持 PARQUETNDJSONCSVAVRO
WITH HEADER ROW仅在 STORED AS CSV 时生效,用于指定 CSV 文件中的 Header
DELIMITER仅在 STORED AS CSV 时生效,用于指定 CSV 文件中的分隔符。
PARTITIONED BY创建表时指定的列来进行分区。
LOCATION关联的文件的位置,支持目录。
查看 CREATE EXTERNAL TABLE 示例

创建一个外部表,并指定一个本地 CSV 文件。

创建外部表可以使用所有 数据类型 (不包括 INTERVAL 等一些特殊类型)中的类型,且不受 CnosDB 固有模型的约束。

CREATE EXTERNAL TABLE cpu (
cpu_hz DECIMAL(10,6) NOT NULL,
temp DOUBLE NOT NULL,
version_num BIGINT NOT NULL,
is_old BOOLEAN NOT NULL,
weight DECIMAL(12,7) NOT NULL
)
STORED AS CSV
WITH HEADER ROW
LOCATION 'tests/data/csv/cpu.csv';

CREATE STREAM TABLE

提示

需要一个 source 表,STREAM 表不支持 ALTER

CREATE STREAM TABLE [IF NOT EXISTS] table_name[(field_definition [, field_definition] ...)]
WITH (db = 'db_name', table = 'table_name', event_time_column = 'time_column')
engine = tskv;

field_definition:
column_name data_type

相关语法:DROP TABLE

ALTER DATABASE

ALTER DATABASE 可以修改数据库中设定的所有参数(不包含 PRECISION),你可以通过 DESCRIBE DATABASE 命令查询当前数据库参数设置。

ALTER DATABASE db_name [alter_db_options]

alter_db_options:
SET db_option

db_option: {
TTL value
| SHARD value
| VNODE_DURATION value
| REPLICA value
}
查看 ALTER DATABASE 示例

修改 TTL

ALTER DATABASE oceanic_station SET TTL '30d';

修改 VNODE_DURATION

修改 VNODE_DURATION 不会对已有的 Vnode 造成影响。

ALTER DATABASE oceanic_station SET VNODE_DURATION '7d';

ALTER TABLE

提示

支持修改/删除 TAGFIELD 类型的列,可以通过 DESCRIBE TABLE 语法查询列类型。

不支持修改列名 time

避免在执行重命名 TAG 类型列的时候执行写入操作,可能会引起 series 冲突。

ALTER TABLE tb_name alter_table_option;

alter_table_option: {
ADD TAG col_name
| ADD FIELD col_name [data_type] [CODEC(code_type)]
| ALTER col_name SET CODEC(code_type)
| DROP col_name
| RENAME COLUMN col_name TO new_col_name
}
查看 ALTER TABLE 示例

添加一个 TAG 类型的列。

ALTER TABLE air ADD TAG height;

添加一个 FIELD 类型的列,并指定压缩算法。

ALTER TABLE air ADD FIELD humidity DOUBLE CODEC(DEFAULT);

修改 humidity 的压缩算法为 QUANTILE

ALTER TABLE air ALTER humidity SET CODEC(QUANTILE);

删除 humidity

ALTER TABLE air DROP humidity;

重命名列名。

ALTER TABLE air RENAME COLUMN height to height_v2;

DROP DATABASE

DROP DATABASE [IF EXISTS] db_name [AFTER <duration>];
选项描述
AFTER设置延迟删除时间,当设置 AFTER 时,数据库将进入禁用阶段,直到持续时间结束,数据库会在磁盘上移除,在持续时间结束之前,可以通过 RECOVER DATABASE 语法进行恢复。默认单位为 d,支持dhm
查看 DROP DATABASE 示例

删除数据库,且数据库会被立即删除。

DROP DATABASE oceanic_station;

删除数据库,并设置数据库在 3 天后被删除。

DROP DATABASE oceanic_station AFTER '3';

撤回删除数据库

在数据库没有在被真正删除之前,即在 AFTER 持续时间结束之前,删除操作可以撤回。

RECOVER DATABASE oceanic_station;

DROP TABLE

DROP TABLE [ IF EXISTS ] tb_name;
查看 DROP TABLE 示例
DROP TABLE air;