CREATE
CREATE
用于创建新的数据库或者表。
CREATE DATABASE
Syntax
创建新数据库:
CREATE DATABASE [IF NOT EXISTS] db_name [WITH <options>]
如果 db_name
数据库已经存在,CREATE
语句的行为如下:
- 不会创建新的数据库。
- 当
IF NOT EXISTS
子句被指定时,不会返回错误。 - 否则,返回错误。
数据库也可以通过使用 WITH
关键字配置与 CREATE TABLE
语句类似的选项。表选项 中提供的所有选项也可以在此处使用。在创建表时,如果未提供相应的表选项,将使用在数据库级别配置的选项或者默认值。
示例
创建名为 test
的数据库:
CREATE DATABASE test;
Query OK, 1 row affected (0.05 sec)
使用 IF NOT EXISTS
再次创建:
CREATE DATABASE IF NOT EXISTS test;
创建一个具有 7 天 TTL
(数据存活时间)的数据库,也就是该数据库中的所有表如果没有单独设置 TTL 选项,都将继承此选项值。
CREATE DATABASE test WITH (ttl='7d');
CREATE TABLE
Syntax
在 db
或当前数据库中创建新表:
CREATE TABLE [IF NOT EXISTS] [db.]table_name
(
column1 type1 [NULL | NOT NULL] [DEFAULT expr1] [TIME INDEX] [PRIMARY KEY] [FULLTEXT | FULLTEXT WITH options] [COMMENT comment1],
column2 type2 [NULL | NOT NULL] [DEFAULT expr2] [TIME INDEX] [PRIMARY KEY] [FULLTEXT | FULLTEXT WITH options] [COMMENT comment2],
...
[TIME INDEX (column)],
[PRIMARY KEY(column1, column2, ...)]
) ENGINE = engine WITH([TTL | storage | ...] = expr, ...)
[
PARTITION ON COLUMNS(column1, column2, ...) (
<PARTITION EXPR>,
...
)
]
表 schema 由 ENGINE
之前的括号指定,表 schema 是列的定义和表的约束。
列定义包括列名称和数据类型,以及可选的 NULL
、NOT NULL
、DEFAULT
等。
表约束
表约束包括以下内容:
TIME INDEX
指定时间索引列,每个表只能有一个时间索引列。它表示 GreptimeDB 的 数据模型 中的Timestamp
类型。PRIMARY KEY
指定表的主键列,它表示 GreptimeDB 的 数据模型 中的Tag
类型。它不能包含时间索引列,但是它总是隐式地将时间索引列添加到键的末尾。- 其他列是 GreptimeDB 的 数据模型 中的
Field
类型。
注意
CREATE
语句中指定的 PRIMARY KEY
不是 传统关系数据库中的主键。
实际上,传统关系数据库中的 PRIMARY KEY
相当于 GreptimeDB 中的 PRIMARY KEY
和 TIME INDEX
的组合。
换句话说,PRIMARY KEY
和 TIME INDEX
一起构成了 GreptimeDB 中行的唯一标识符。
如果表已经存在且创建表时指定了 IF NOT EXISTS
,CREATE
语句不会返回错误;否则返回错误。
表选项
用户可以使用 WITH
添加表选项。有效的选项包括以下内容:
选项 | 描述 | 值 |
---|---|---|
ttl | 表数据的存储时间 | 字符串值,例如 '60m' , '1h' 代表 1 小时, '14d' 代表 14 天等。支持的时间单位有:s / m / h / d |
storage | 自定义表的存储引擎,存储引擎提供商的名字 | 字符串,类似 S3 、Gcs 等。 必须在 [[storage.providers]] 列表里配置, 参考 configuration。 |
compaction.type | Compaction 策略 | 字符串值. 只支持 twcs 。你可以阅读这篇文章来了解 twcs compaction 策略 |
compaction.twcs.max_active_window_files | 当前活跃时间窗口内的最大文件数 | 字符串值,如 '8'。只在 compaction.type 为 twcs 时可用 |
compaction.twcs.max_inactive_window_files | 非活跃时间窗口内的最大文件数 | 字符串值,如 '1'。只在 compaction.type 为 twcs 时可用 |
compaction.twcs.time_window | Compaction 时间窗口 | 字符串值,如 '1d' 表示 1 天。该表会根据时间戳将数据分区到不同的时间窗口中。只在 compaction.type 为 twcs 时可用 |
memtable.type | memtable 的类型 | 字符串值,支持 time_series ,partition_tree |
append_mode | 该表是否时 append-only 的 | 字符串值。默认值为 'false',根据 'merge_mode' 按主键和时间戳删除重复行。设置为 'true' 可以开启 append 模式和创建 append-only 表,保留所有重复的行 |
merge_mode | 合并重复行的策略 | 字符串值。只有当 append_mode 为 'false' 时可用。默认值为 last_row ,保留相同主键和时间戳的最后一行。设置为 last_non_null 则保留相同主键和时间戳的最后一个非空字段。 |
comment | 表级注释 | 字符串值. |
创建指定 TTL 的表
例如,创建一个存储数据 TTL(Time-To-Live) 为七天的表:
CREATE TABLE IF NOT EXISTS temperatures(
ts TIMESTAMP TIME INDEX,
temperature DOUBLE DEFAULT 10,
) with(ttl='7d');
创建自定义存储的表
或者创建一个表单独将数据存储在 Google Cloud Storage 服务上:
CREATE TABLE IF NOT EXISTS temperatures(
ts TIMESTAMP TIME INDEX,
temperature DOUBLE DEFAULT 10,
) with(ttl='7d', storage="Gcs");