CeresDB 是一个 Schema-less 的时序数据引擎,你可以不必创建 schema 就立刻写入数据(CeresDB 会根据你的第一次写入帮你创建一个默认的 schema)。 当然你也可以自行创建一个 schema 来更精细化的管理的表(比如索引等)
每个表都必须要有一个主时间列,用来映射到时序数据里的时间戳,如 opentsdb/prometheus 里的 timestamp 。建表时,用户必须指定表中一个 Timestamp 类型的列为主时间列,该列会自动映射到 opentsdb/prometheus 等协议里的 timestamp 。需要注意的是,主时间列的名字可以自定义,不需要一定叫 timestamp
建表语句可以
上述约束可以全大写或者小写,在建表后均不可修改
CREATE TABLE with_primary_key(
ts TIMESTAMP NOT NULL,
c1 STRING NOT NULL,
c2 STRING NULL,
c3 DOUBLE NULL,
c4 STRING NULL,
c5 STRING NULL,
TIMESTAMP KEY(ts),
PRIMARY KEY(c1, ts)
) ENGINE=Analytic WITH (ttl='7d');
CREATE TABLE with_primary_key_tag(
ts TIMESTAMP NOT NULL,
c1 STRING TAG NOT NULL,
c2 STRING TAG NULL,
c3 STRING TAG NULL,
c4 DOUBLE NULL,
c5 STRING NULL,
c6 STRING NULL,
c7 TIMESTAMP NULL,
TIMESTAMP KEY(ts),
PRIMARY KEY(c1, ts)
) ENGINE=Analytic WITH (ttl='7d');
CREATE TABLE with_tag(
ts TIMESTAMP NOT NULL,
c1 STRING TAG NOT NULL,
c2 STRING TAG NULL,
c3 STRING TAG NULL,
c4 DOUBLE NULL,
c5 STRING NULL,
c6 STRING NULL,
TIMESTAMP KEY(ts)
) ENGINE=Analytic WITH (ttl='7d');
因此,实际逻辑上该语句会变成类似以下形式的语句(注意并不存在这种语法)
CREATE TABLE with_tag(
tsid AUTO_HASH_BY_TAGS,
ts TIMESTAMP NOT NULL,
c1 STRING TAG NOT NULL,
c2 STRING TAG NULL,
c3 STRING TAG NULL,
c4 DOUBLE NULL,
c5 STRING NULL,
c6 STRING NULL,
TIMESTAMP KEY(ts),
PRIMARY KEY(tsid, ts)
) ENGINE=Analytic;
DESCRIBE TABLE MY_FIRST_TABLE
ALTER TABLE MY_FIRST_TABLE ADD COLUMN col_20 UINT64
EXISTS [TABLE] xxx_table