TDengine字段注释、SQL语句编写及变更数据存储规则咨询
TDengine 常见问题解答
1. TDengine是否支持为每个字段添加注释?
支持。在创建表时可通过COMMENT关键字为单个字段添加注释,语法兼容标准SQL。示例:
CREATE TABLE sensor ( ts TIMESTAMP, temp FLOAT COMMENT '环境温度(摄氏度)', hum INT COMMENT '环境相对湿度(%)' ) TAGS (device_id INT COMMENT '设备ID');
也可后续通过ALTER TABLE修改字段注释:
ALTER TABLE sensor MODIFY COLUMN temp FLOAT COMMENT '修正后环境温度(摄氏度)';
2. 如何编写支持SQL规范的语句?
TDengine兼容ANSI SQL核心语法,遵循以下原则即可保证兼容性:
- 优先使用标准SQL基础语法,
SELECT/INSERT/CREATE TABLE等核心操作写法与标准完全一致 - 仅在必要时使用TDengine时序扩展语法(如
TAGS/WINDOW),避免过度依赖非标准特性 - 对TDengine独有的快捷语法,可替换为标准SQL等价写法,例如:
非标准写法:SELECT LAST * FROM sensor WHERE device_id = 1001;
标准等价写法:SELECT * FROM sensor WHERE device_id = 1001 ORDER BY ts DESC LIMIT 1;
标准SQL风格示例语句:
-- 标准插入 INSERT INTO sensor (ts, temp, hum) VALUES ('2024-05-20 10:00:00', 26.3, 42); -- 标准查询 SELECT ts, temp FROM sensor WHERE device_id = 1001 AND ts BETWEEN '2024-05-20 00:00:00' AND '2024-05-20 12:00:00';
3. TDengine是否仅存储变更数据,即当采集的数据与数据库中已存储的上一次值相同时,不会执行写入操作?
TDengine默认不自动跳过重复值,只要写入语句合法,所有数据都会被存储。若需实现仅存储变更数据的需求,可通过两种方式处理:
- 客户端侧过滤:写入前查询对应设备最新记录,对比当前数据,仅当值变化时发起写入请求
- 服务端侧过滤:利用TDengine流处理(Stream)功能创建过滤重复值的流,将处理后的数据写入目标表;或使用2.0及以上版本支持的
UPSERT语法(需结合业务逻辑调整,UPSERT为更新/插入而非直接跳过重复)
内容的提问来源于stack exchange,提问作者Sun Hong
相关产品推荐
相关产品推荐

