数据定义语言
用来定义数据库结构和组织。
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
}
选项 | 描述 |
---|---|
TTL | Duration。数据过期时间,默认为无限 INF 。 |
SHARD | 表示分片个数,默认:1 。 |
VNODE_DURATION | Duration。数据在 SHARD 中的时间窗口长度,默认 '1y' 。 |
REPLICA | 数据在集群中的复本数,默认为 1 。(备注:副本数必须小于且等于集群中 tskv 节点的数据)。 |
PRECISION | 数据库的时间戳精度,默认为 ns 。支持的单位:ms 、us 、ns |
MAX_MEMCACHE_SIZE | 数据库的最大缓存大小,默认为 '512MiB' ,可使用配置文件指定每次创建时的默认值。 |
MEMCACHE_PARTITIONS | 数据库的缓存分区数,默认为 1 ,可使用配置文件指定每次创建时的默认值。 |
WAL_MAX_FILE_SIZE | 单个 WAL 文件的最大大小,默认为 '1GiB' ,可使用配置文件指定每次创建时的默认值。 |
WAL_SYNC | WAL 是否每次写入同步,默认为 'false' ,可使用配置文件指定每次创建时的默认值。 |
STRICT_WRITE | 是否开启严格写,即写入是否需要提前创建表,默认为 'false' ,可使用配置文件指定每次创建时的默认值。 |
MAX_CACHE_READERS | vnode的最大缓存的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
的压缩算法为 QUANTILE
,temperature
不压缩,pressure
使用默认压缩算法。
不同的数据类型可以指定不同的压缩算法,支持列表请参考 压缩算法
CREATE TABLE air(
visibility DOUBLE CODEC(QUANTILE),
temperature DOUBLE CODEC(NULL),
pressure DOUBLE,
TAGS(station)
);
如果需要对创建之后的表进行其他操作,请参考 INSERT
、 ALTER TABLE
、DROP 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 | 指定文件的格式,支持 PARQUET 、NDJSON 、CSV 、AVRO 。 |
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
支持修改/删除 TAG
和 FIELD
类型的列,可以通过 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 ,支持d 、h 、m |
查看 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;