关于Thingsboard中ts_kv表及设备数据存储的技术问询
Thingsboard PostgreSQL 存储相关问题解答
1. ts_kv表中key的定义、生成方式及关联关系
- 定义:
key是遥测数据的系统内部唯一标识,对应设备上报的业务遥测字段名(如温度、湿度)的映射ID。 - 生成方式:当设备首次上报某个新遥测字段时,系统自动为该字段生成唯一
key(通常是哈希值或UUID),并同步存储到entity_key表;若提前在设备遥测配置中预定义字段,系统会在配置阶段生成对应key。 - 关联关系:
entity_id绑定具体设备(或其他实体),key绑定该设备的某一特定遥测字段,ts为数据上报时间戳,三者组合唯一标识一条遥测数据。
2. 查询数据对应的key(对接外部系统)
需结合entity_key表(存储key与业务字段名的映射关系)进行查询,示例SQL如下:
查询指定设备的所有遥测字段与对应key
SELECT ek.key_name AS 业务字段名, ek.key AS 数据库存储key FROM entity_key ek JOIN device d ON ek.entity_id = d.id WHERE d.name = '你的设备名称';
查询指定设备的某类遥测数据及对应key
SELECT d.name AS 设备名称, ek.key_name AS 业务字段名, tk.ts AS 上报时间, tk.v_double AS 数据值 -- 根据数据类型选择对应字段:v_string、v_bool、v_long等 FROM ts_kv tk JOIN entity_key ek ON tk.key = ek.key JOIN device d ON tk.entity_id = d.id WHERE d.name = '你的设备名称' AND ek.key_name = 'temperature';
3. 是否可为不同设备创建独立数据表并对接仪表板
Thingsboard默认采用ts_kv(含分表如ts_kv_latest、按时间分片的表)作为统一遥测存储,不支持自动为单个设备创建独立数据表。
若需自定义存储,可通过规则链将数据同步到自定义表,但仪表板默认仅从系统内置遥测存储拉取数据:
- 专业版/企业版可使用SQL查询小部件直接读取自定义表数据进行可视化;
- 开源版需开发自定义小部件,或通过API将自定义表数据导入系统遥测存储后再可视化。
不推荐此方案,会破坏系统时序数据管理机制,增加维护复杂度。
4. 相关主题的分析文档
可参考Thingsboard官方文档中的「数据存储」章节,里面详细说明了时序数据的存储架构、核心表结构及关联逻辑;另外官方提供的数据库Schema说明文档,会覆盖ts_kv、entity_key等表的具体定义。
内容的提问来源于stack exchange,提问作者gek
相关产品推荐
相关产品推荐

