400-800-0824
info@ymatrix.cn
400-800-0824
info@ymatrix.cn
400-800-0824
info@ymatrix.cn
400-800-0824
info@ymatrix.cn
400-800-0824
info@ymatrix.cn
YMatrix 文档
关于 YMatrix
标准集群部署
数据写入
数据迁移
数据查询
运维监控
参考指南
工具指南
数据类型
存储引擎
执行引擎
系统配置参数
SQL 参考
常见问题(FAQ)
新架构 FAQ
集群部署 FAQ
SQL 查询 FAQ
MatrixGate FAQ
运维 FAQ
监控告警 FAQ
PXF FAQ
PLPython FAQ
性能 FAQ
本文档主要介绍 YMatrix 支持的常用数据类型。
主要为如下三种类型:
YMatrix 支持的数值类型主要分 4 类:
具体信息如下:
类型 | 别名 | 大小 | 范围 | 说明 |
---|---|---|---|---|
smallint | int2 | 2 字节 | -32768 ~ 32767 | 小范围整数 |
int | int4 | 4 字节 | -2147483648 ~ 2147483647 | 整数类型 |
bigint | int8 | 8 字节 | -9223372036854775808 ~ 9223372036854775807 | 大范围整数 |
serial | serial4 | 4 字节 | 1 ~ 2147483647 | 自增型整数 |
bigserial | serial8 | 8 字节 | 1 ~ 9223372036854775807 | 大范围自增型整数 |
real | float4 | 4 字节 | 6 位精度 | 可变精度 |
double precision | float8 | 8 字节 | 15 位精度 | 可变精度 |
decimal | numeric | 可变 | 无限制 | 固定精度 |
YMatrix 支持的字符串类型主要有 2 种:
具体信息如下:
类型 | 别名 | 大小 | 范围 | 说明 |
---|---|---|---|---|
character [ (n) ] | char [ (n) ] | 1 字节 + n | 最长 n 个字符的字符串 | 定长字符串,未指定的字符用空格填充 |
character varying [ (n) ] | varchar [ (n) ] | 1 字节 + 字符串大小 | 最长 n 个字符的字符串 | 有长度限制的变长字符串,上限 10485760 字节 |
text | 1 字节 + 字符串长度 | 任意长度字符串 | 无长度限制的变长字符串 |
YMatrix 的日期时间类型主要为 3 种:
日期。仅能表示年-月-日,表示不了时间:
时间。仅能表示时间,表示不了日期:
日期和时间。既能表示日期又能表示时间:
具体信息如下:
类型 | 别名 | 大小 | 范围 | 说明 |
---|---|---|---|---|
date | 4 字节 | 4713 BC ~ 294,277 AD | 日历日期 (年, 月, 日) | |
time [ (p) ] [ without time zone ] | 8 字节 | 00:00:00[.000000] ~ 24:00:00[.000000] | 一天内的时间 | |
time [ (p) ] with time zone | timetz | 12 字节 | 00:00:00+1359 ~ 24:00:00-1359 | 一天内的时间, 带时区 |
timestamp [ (p) ] [ without time zone ] | 8 字节 | 4713 BC ~ 294,277 AD | 日期和时间 | |
timestamp [ (p) ] with time zone | timestamptz | 8 字节 | 4713 BC ~ 294,277 AD | 日期和时间, 带时区 |
从时间类型中可以看到一个特殊信息:time zone,即时区。默认 without time zone,即无时区。那么时区是什么,对于时间类型又有什么影响呢?
你将通过创建一张测试表的过程来了解它。
=# CREATE TABLE test (
c1 int,
c2 timestamp,
c3 timestamp with time zone
)
USING MARS3
DISTRIBUTED BY (c1)
ORDER BY (c1,c2);
测试表除了分布键外包含了两个时间戳列,一个默认不带时区,一个带时区。插入测试数据并查询:
=# INSERT INTO test VALUES(1, now(), now());
=# SELECT * FROM test;
c1 | c2 | c3
----+--------------------------+-----------------------------
1 | 2021-12-01 14:54:09.4783 | 2021-12-01 14:54:09.4783+08
(1 row)
=# SHOW timezone;
TimeZone
---------------
Asia/Shanghai
(1 row)
从查询结果可以看到,两个时间戳列显示的时间是一样,带时区的列后面有一个 +08,表示该时间戳所属时区为“东八区”。然后通过 SHOW timezone
命令看到了当前时区为 'Asia / Shanghai'
,即北京时间。
下面我们修改时区再查看结果:
=# SET timezone TO 'Japan';
=# SELECT * FROM test;
c1 | c2 | c3
----+--------------------------+-----------------------------
1 | 2021-12-01 14:54:09.4783 | 2021-12-01 15:54:09.4783+09
(1 row)
可以看到,当把数据库时区改到日本后,带时区的 c3 列显示的时间已经和 c2 不一样了,并且后面时区信息变成了 +09,即“东九区”。
综上,带时区的时间戳列存储的时间是有时区信息的,会在不同的时区下显示不同的时间;而不带时区的时间戳列则在任何时区下显示的时间都是相同的。当设备部署在不同时区的地域时,则时间戳必须要有时区信息。且对于 timestamp 类型有无时区占用存储空间都相同,何乐而不为?
时序场景数据分为如下几类:
具体信息如下:
类型 | 描述 | 最佳实践 |
---|---|---|
时间戳 | 表示指标采集时间。包括日期及具体时间 | timestamp with time zone |
设备标识 | 字符串标识 | varchar / text |
设备标识 | 定长的设备编号信息,如序列号 | char |
设备标识 | 单独创建设备表,以自增 ID 来唯一标识设备 | serial / bigserial |
采集指标 | 采集结果为整数 | smallint / int / bigint |
采集指标 | 采集结果带小数,且小数点精确的位数固定,取值范围相对固定,如温度 | decimal |
采集指标 | 采集结果带小数,且小数点精确的位数不固定,取值范围大 | float / double precision |
注意!
除常用数据类型外,YMatrix 还支持可拓展数据类型 JSON、JSONB、MXKV 及 空间数据类型。