表的基本操作
在阅读本文档之前请先阅读 数据模型.
GreptimeDB 通过 SQL 提供了表管理的功能,下面通过 MySQL Command-Line Client 来演示它。
以下部分更详细的关于 SQL 语法的解释,请参考 SQL reference。
创建数据库
默认的数据库是 public
,可以手动创建一个数据库。
CREATE DATABASE test;
Query OK, 1 row affected (0.05 sec)
创建一个具有 7 天 TTL
(数据存活时间)的数据库,也就是该数据库中的所有表如果没有单独设置 TTL 选项,都将继承此选项值。
CREATE DATABASE test WITH (ttl='7d');
列出所有现有的数据库。
SHOW DATABASES;
+---------+
| Schemas |
+---------+
| test |
| public |
+---------+
2 rows in set (0.00 sec)
使用 like
语法:
SHOW DATABASES LIKE 'p%';
+---------+
| Schemas |
+---------+
| public |
+---------+
1 row in set (0.00 sec)
然后更改数据库:
USE test;
更改回 public
数据库:
USE public;
创建表
NOTE
注意:GreptimeDB 提供了一种 schemaless 方法来写入数据,不需要使用额外的协议手动创建表。参见 自动生成表结构**。
如果您有特殊需要,仍然可以通过 SQL 手动创建表。假设我们想要创建一个名为 monitor
的表,其数据模型如下:
host
是独立机器的主机名,是Tag
列,用于在查询时过滤数据。ts
是收集数据的时间,是Timestamp
列。它也可以在查询数据时用作时间范围的过滤器。cpu
和memory
是机器的 CPU 利用率和内存利用率,是包含实际数据且未索引的Field
列。
创建表的 SQL 代码如下。在 SQL 中,我们使用 PRIMARY KEY 来指定 Tag
,使用 TIME INDEX
来指定 Timestamp
列,其余列是 Field
。
CREATE TABLE monitor (
host STRING,
ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP() TIME INDEX,
cpu FLOAT64 DEFAULT 0,
memory FLOAT64,
PRIMARY KEY(host));
Query OK, 0 row affected (0.03 sec)
创建一个具有 7 天 TTL
(数据存活时间)的表:
CREATE TABLE monitor (
host STRING,
ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP() TIME INDEX,
cpu FLOAT64 DEFAULT 0,
memory FLOAT64,
PRIMARY KEY(host)
) WITH (ttl='7d');
NOTE
GreptimeDB 目前不支持在创建表后更改 TIME INDEX 约束, 因此,在创建表之前,仔细选择适当的 TIME INDEX 列。
CREATE TABLE
语法
- 时间戳列:GreptimeDB 是一个时序数据库系统,在创建表时,必须用
TIME INDEX
关键字明确指定时间序列的列。 时间序列的列的数据类型必须是TIMESTAMP
。 - 主键:
Primary key
指定的主键列类似于其他时序系统中的 Tag,比如 InfluxDB。 主键和时间戳列用于唯一地定义一条时间线,这类似于其他时间序列系统中的时间线的概念,如 InfluxDB。 - 表选项:当创建一个表时,可以指定一组表选项,点击这里了解更多细节。
表名的限制条件
GreptimeDB 支持在表名中使用有限的特殊字符,但必须遵守以下约束:
- 有效的 GreptimeDB 表名必须以字母(小写或大写)或
-
/_
/:
开头。 - 表名的其余部分可以是字母数字或以下特殊字符:
-
/_
/:
/@
/#
。 - 任何包含特殊字符的表名都必须用反引号括起来。
以下是有效和无效表名的例子:
-- ✅ Ok
create table a (ts timestamp time index);
-- ✅ Ok
create table a0 (ts timestamp time index);
-- 🚫 Invalid table name
create table 0a (ts timestamp time index);
-- 🚫 Invalid table name
create table -a (ts timestamp time index);
-- ✅ Ok
create table `-a` (ts timestamp time index);
-- ✅ Ok
create table `a@b` (ts timestamp time index);
描述表
显示表的详细信息:
DESC TABLE monitor;
+--------+----------------------+------+------+---------------------+---------------+
| Column | Type | Key | Null | Default | Semantic Type |
+--------+----------------------+------+------+---------------------+---------------+
| host | String | PRI | YES | | TAG |
| ts | TimestampMillisecond | PRI | NO | current_timestamp() | TIMESTAMP |
| cpu | Float64 | | YES | 0 | FIELD |
| memory | Float64 | | YES | | FIELD |
+--------+----------------------+------+------+---------------------+---------------+
4 rows in set (0.01 sec)
Semantic Type 列描述了表的数据模型。host
是 Tag
列,ts
是 Timestamp
列,cpu
和 memory
是 Field
列。