数据类型
时间戳
使用 TDengine,最重要的是时间戳。创建并插入记录、查询历史记录的时候,均需要指定时间戳。时间戳有如下规则:
- 时间格式为
YYYY-MM-DD HH:mm:ss.MS
,默认时间分辨率为毫秒。比如:2017-08-12 18:25:58.128
- 内部函数 NOW 是客户端的当前时间
- 插入记录时,如果时间戳为 NOW,插入数据时使用提交这条记录的客户端的当前时间
- Epoch Time:时间戳也可以是一个长整数,表示从 UTC 时间 1970-01-01 00:00:00 开始的毫秒数。相应地,如果所在 Database 的时间精度设置为“微秒”,则长整型格式的时间戳含义也就对应于从 UTC 时间 1970-01-01 00:00:00 开始的微秒数;纳秒精度逻辑相同。
- 时间可以加减,比如 NOW-2h,表明查询时刻向前推 2 个小时(最近 2 小时)。数字后面的时间单位可以是 b(纳秒)、u(微秒)、a(毫秒)、s(秒)、m(分)、h(小时)、d(天)、w(周)。比如
SELECT * FROM t1 WHERE ts > NOW-2w AND ts <= NOW-1w
,表示查询两周前整整一周的数据。在指定降采样操作(Down Sampling)的时间窗口(Interval)时,时间单位还可以使用 n(自然月)和 y(自然年)。
TDengine 缺省的时间戳精度是毫秒,但通过在 CREATE DATABASE
时传递的 PRECISION
参数也可以支持微秒和纳秒。
CREATE DATABASE db_name PRECISION 'ns';
数据类型
在 TDengine 中,普通表的数据模型中可使用以下数据类型。
# | 类型 | Bytes | 说明 |
---|---|---|---|
1 | TIMESTAMP | 8 | 时间戳。缺省精度毫秒,可支持微秒和纳秒,详细说明见上节。 |
2 | INT | 4 | 整型,范围 [-2^31, 2^31-1] |
3 | INT UNSIGNED | 4 | 无符号整数,[0, 2^32-1] |
4 | BIGINT | 8 | 长整型,范围 [-2^63, 2^63-1] |
5 | BIGINT UNSIGNED | 8 | 长整型,范围 [0, 2^64-1] |
6 | FLOAT | 4 | 浮点型,有效位数 6-7,范围 [-3.4E38, 3.4E38] |
7 | DOUBLE | 8 | 双精度浮点型,有效位数 15-16,范围 [-1.7E308, 1.7E308] |
8 | BINARY | 自定义 | 记录单字节字符串,建议只用于处理 ASCII 可见字符,中文等多字节字符需使用 NCHAR |
9 | SMALLINT | 2 | 短整型, 范围 [-32768, 32767] |
10 | SMALLINT UNSIGNED | 2 | 无符号短整型,范围 [0, 65535] |
11 | TINYINT | 1 | 单字节整型,范围 [-128, 127] |
12 | TINYINT UNSIGNED | 1 | 无符号单字节整型,范围 [0, 255] |
13 | BOOL | 1 | 布尔型, |
14 | NCHAR | 自定义 | 记录包含多字节字符在内的字符串,如中文字符。每个 NCHAR 字符占用 4 字节的存储空间。字符串两端使用单引号引用,字符串内的单引号需用转义字符 \' 。NCHAR 使用时须指定字符串大小,类型为 NCHAR(10) 的列表示此列的字符串最多存储 10 个 NCHAR 字符。如果用户字符串长度超出声明长度,将会报错。 |
15 | JSON | JSON 数据类型, 只有 Tag 可以是 JSON 格式 | |
16 | VARCHAR |