TDengine 写
x/tdengineWrite组件:v0.37.0+写入 TDengine 时序数据库(REST/SQL INSERT)。输入要求为 JSON SeriesPoint 列表。
需要额外引入扩展库: rulego-components-iot (opens new window)
# 数据落盘模型
TDengine 是 schema-first 数据库,组件不负责建表,目标表结构需用户预建。按 SeriesPoint 是否带 tags 分两种行为:
- 带 tags(推荐,IoT 常规场景):按超级表(STable)模型写入。
measurement为超级表名,tags 作为子表标签值;子表不存在时由INSERT ... USING ... TAGS(...)语法自动创建,无需预建。子表名 = 净化前缀(measurement+ 各 tag 值按 tag key 字典序拼接,非法字符替换为_)+ 8 位十六进制哈希后缀(对原始值计算,dev-01/dev_01等净化后同名的值哈希不同,不会串表),总长不超过 192 字节。 - 不带 tags:写入与
measurement同名的普通表,需预建。
列结构约定:数据列首列固定为 ts(TIMESTAMP),其余为各 field key;超级表的 TAGS 列为各 tag key。超级表示例(TAGS 列与 tags 配置对应,数据列与采集点/fields 配置对应):
CREATE STABLE db0.device_data (ts TIMESTAMP, temp DOUBLE, humidity DOUBLE)
TAGS (device_id NCHAR(64), site NCHAR(32));
1
2
2
写入行为说明:
- 一条消息内的批量点合并为多表段 INSERT 语句执行(多个子表/普通表可共用一条语句);同一子表的点字段集不同时,列取超集、缺失字段补
NULL;超过单语句字节预算(约 512KB,taosAdaptermaxSQLLength默认 1MB)时自动拆分为多条语句依次执行; - 时间戳(纳秒)以带时区偏移的 ISO8601 字符串字面量写入,由 TDengine 按目标库精度(
ms/us/ns,建库时CREATE DATABASE ... PRECISION 'ns'指定)自动解析,组件无需配置精度;timestamp=0写入NOW();早于 1970 年的时间戳视为无效; - 值为 null 或 NaN/±Inf 的字段跳过;整批点全部无效(无有效字段或时间戳越界)时路由到 Failure。
# 配置
| 字段 | 类型 | 说明 | 默认值 |
|---|---|---|---|
| dsn | string | DSN,格式 root:taosdata@http(host:6041)/。支持 ref:// 复用同链连接 | 必填 |
| db | string | 数据库名,支持 ${msg.xx}/${metadata.xx} 模板 | 必填 |
| measurement | string | 测点表名(可选)。配置后可直接把采集点数组透视为 SeriesPoint,或把扁平 map/map 数组逐行转换为 SeriesPoint;留空则输入必须已经是 SeriesPoint | 空 |
| tags | array | 落盘索引维度,见下表 | 空 |
| fields | array | 落盘字段映射,见下表;留空=全量展开(采集点)或整行 map 作为 fields | 空 |
# tags
每一项为一个键值对:
| key | value |
|---|---|
| 索引维度名 | 索引值,支持 ${msg.xx} 模板 |
# fields
每一项为一个字段映射:
| key | source |
|---|---|
| 落盘字段名 | 采集点 name 或 map key;留空=全量展开 |
# 输入格式(msg.Data)
输入为 SeriesPoint JSON 数组(或单对象)。配置 measurement 后可接收 iot_points.Data 采集点数组自动透视,或扁平 map/map 数组逐行转换。SeriesPoint 结构同 x/tsdbWrite。
在 GitHub 上编辑此页 (opens new window)
上次更新: 2026/08/01, 05:05:14