数据定义语言
用来定义数据库结构和组织。
CREATE DATABASE
CREATE DATABASE [IF NOT EXISTS] db_name [WITH db_options];
db_options:
db_option ...
db_option: {
TTL value
| SHARD value
| VNODE_DURATION value
| REPLICA value
| PRECISION {'ms' | 'us' | 'ns'}
}
选项 | 描述 |
---|---|
TTL | 数据过期时间,默认无限保存,支持的单位:d 、h 、m 。示例:TTL 10d 、TTL 180m 。 |
SHARD | 表示分片个数,默认:1 。 |
VNODE_DURATION | 数据在 SHARD 中的时间窗口长度,默认 365 天,支持的单位:d 、h 、m 。示例:TTL 10d 、TTL 180m 。 |
REPLICA | 数据在集群中的复本数,默认为 1 。(备注:副本数必须小于且等于集群中 tskv 节点的数据)。 |
PRECISION | 数据库的时间戳精度,默认为 ns 。支持的单位:ms 、us 、ns |
查看 CREATE DATABASE
示例
创建一个数据库,且保留策略为无限长。
CREATE DATABASE oceanic_station;
创建一个数据库,设置过期时间为 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
支持修改/删除 FIELD
类型的列,可以通过 DESCRIBE TABLE
语法查询列类型。
不支持修改列名 time
。
ALTER TABLE tb_name alter_table_option;
alter_table_option: {
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
示例
添加一个 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;
DROP DATABASE
DROP DATABASE [IF EXISTS] db_name;
查看 DROP DATABASE
示例
删除数据库,且数据库会被立即删除。
DROP DATABASE oceanic_station;
DROP TABLE
DROP TABLE [ IF EXISTS ] tb_name;
查看 DROP TABLE
示例
DROP TABLE air;