简体中文
Appearance
简体中文
Appearance
时序模型面向监控指标、设备遥测、工业采集、能源数据等按时间持续写入的数据场景。合理的时序表设计应同时兼顾以下目标:
在设计时序表时,建议优先确定以下问题:时间列是谁、记录唯一性如何定义、查询最常用的过滤条件是什么、数据保留周期有多长。
CREATE TABLE [IF NOT EXISTS] [database.]table_name
(
name1 TIMESTAMP [ DEFAULT default_expr ],
name2 type [ DEFAULT default_expr ],
name3 type [ DEFAULT default_expr ] ,
...
TIMESTAMP KEY (name1),
[ PRIMARY KEY (name1, ...) ],
...
)
PARTITION BY HASH(column_list) PARTITIONS 2
[ENGINE=TimeSeries]
[ WITH ( [ key = value] [, ... ] ) ]TIMESTAMP KEYBACKFILL_TIME_WINDOW 统一规划补录策略PRIMARY KEY 用于定义记录唯一性,且必须包含 TIMESTAMP KEYPRIMARY KEYpoint_number、device_id、regionPRIMARY KEY,PARTITION BY HASH(column_list) 中的列必须来自 PRIMARY KEY 中除 TIMESTAMP KEY 外的列该场景适用于以单点位查询、单点位写入为主的设备监控或传感器采集业务。
| 字段 | 备注 |
|---|---|
| time | 数据产生/记录的时间点(时序数据必须拥有一个时间) |
| point_number | 点位信息 |
| temperature | 温度 |
| humidity | 湿度 |
建表语句如下:
CREATE TABLE `point_table` (
`time` TIMESTAMP(9) NOT NULL,
`point_number` INT32 NOT NULL,
`temperature` DOUBLE,
`humidity` DOUBLE,
TIMESTAMP KEY(`time`),
)
PARTITION BY HASH (`point_number`) PARTITIONS 2说明:
time 使用 TIMESTAMP(9),适合纳秒级时间精度场景point_number 是主要过滤键,也是分区键,可提升单点位查询效率point_number 分区通常比随机分区更稳定PARTITIONS 的具体设置需结合写入规模与集群资源评估该场景适用于既需要按点位查询,也需要按区域聚合或筛选的业务。
| 字段 | 备注 |
|---|---|
| time | 数据产生/记录的时间点(时序数据必须拥有一个时间) |
| region | 点位所属区域 |
| point_number | 点位信息 |
| temperature | 温度 |
| humidity | 湿度 |
建表语句如下:
CREATE TABLE `point_table` (
`time` TIMESTAMP(9) NOT NULL,
`region` STRING NOT NULL,
`pointNumber` INT32 NOT NULL,
`temperature` DOUBLE,
TIMESTAMP KEY(`time`),
primary key(`region`, `pointNumber`, `time`)
)
PARTITION BY HASH (`region`) PARTITIONS 2说明:
PRIMARY KEY(region, pointNumber, time) 显式表达了记录唯一性region 作为分区键,有利于按区域筛选和区域级聚合regionTTL:用于控制历史数据保留周期,适合按月、按季度清理历史数据BACKFILL_TIME_WINDOW:用于定义允许迟到写入的时间范围MEMTABLE_SIZE:影响落盘频率与后台合并压力,过小会放大写入抖动ENABLE_LAST_CACHE:适合“查最新值”明显多于“查历史明细”的场景PARTITIONS 数量不要明显超过集群总 CPU Core 数PARTITIONS 在建表后当前不支持动态修改,因此需要在建表阶段一次性规划更具体的写入侧建议可参考 高性能写入。
合理的时序表设计是保证系统性能的关键,建议根据实际业务场景和数据特征进行针对性优化。