TDengine 快速入门实战指南:安装部署、数据建模、写入与查询全流程

发布时间:2026/9/20 3:09:36
TDengine 快速入门实战指南:安装部署、数据建模、写入与查询全流程 TDengine 快速入门实战指南安装部署、数据建模、写入与查询全流程【免费下载链接】tdengineTDengine is an open source, high-performance, cloud native time-series database optimized for Internet of Things (IoT), Connected Cars, Industrial IoT and DevOps.项目地址: https://gitcode.com/taosdata/tdengine本指南基于 TDengine 开源仓库的 Quick Start 文档带你从零完成一次完整的时序数据库体验先用 Docker 或安装包把 TDengine 跑起来再用taos命令行和taosBenchmark生成测试数据最后以智能电表为例依次掌握数据模型设计超级表/子表/虚拟表、SQL 写入、查询聚合、时间窗口分析、数据订阅与流处理。读完本文你将具备独立搭建 TDengine 环境并用标准 SQL 完成时序数据建表—写入—查询—流式处理闭环的实战能力。整体架构与文档脉络TDengine 的完整 TSDB 安装包包含以下核心组件taosd数据库服务端负责存储与查询taosAdapter负责第三方系统集成与 RESTful 访问的适配器taosc应用程序驱动客户端库taos命令行工具 ShelltaosExplorer / taoskeeper等配套组件。除了多语言连接器TDengine 还通过 taosAdapter 提供 RESTful 接口。官方 Quick Start 建议的路径是先完成环境安装然后按基本概念 → 数据建模 → 数据写入 → 数据查询的顺序依次实践再延伸到订阅、流处理与可视化。安装与部署三条路径任选方式一Docker 部署从 3.3.7.0 版本起TDengine 的 Docker 镜像命名发生了变更社区版tdengine/tdengine更名为tdengine/tsdb企业版tdengine/tdengine-ee更名为tdengine/tsdb-ee。本指南以企业版镜像为例。前置条件机器已安装 Docker 且当前用户有权限执行docker命令能够访问 Docker Hub或已从产品下载中心获得离线镜像确认 网络端口要求 中 TDengine 所需的端口未被占用。拉取最新企业版镜像docker pull tdengine/tsdb-ee:latest也可以拉取指定版本将{{VERSION}}替换为实际版本号docker pull tdengine/tsdb-ee:{{VERSION}}若无法直接访问 Docker Hub可在 TDengine 产品下载中心下载离线镜像按页面说明加载后修改镜像名与 tag。启动容器关键端口映射一目了然docker run -d \ -v ~/data/taos/dnode/data:/var/lib/taos \ -v ~/data/taos/dnode/log:/var/log/taos \ -p 6030:6030 -p 6041:6041 -p 6043:6043 -p 6060:6060 \ -p 6044-6049:6044-6049 \ -p 6044-6045:6044-6045/udp \ -p 6050:6050 -p 6055:6055 \ --name tdengine-tsdb \ tdengine/tsdb-ee这里6030是 taosd 服务端口6041是 RESTful/taosAdapter 端口6060是 Explorer 可视化端口。检查容器状态docker ps -f nametdengine-tsdb若输出中STATUS为Up ... (healthy)说明容器已正常启动。随后进入容器docker exec -it tdengine-tsdb bash容器内即可直接使用taos、taosBenchmark等工具。更完整的 Docker 部署说明参见 Docker 部署。方式二安装包部署Linux / Windows安装前请确认机器满足 支持平台 与 系统要求。Windows 下安装器会检查 Microsoft Visual C Redistributable 2015-2022 x64 14.44 及以上版本。Linux 安装步骤从产品下载中心下载 tar.gz 安装包解压以 x64 架构为例tar -zxvf tdengine-tsdb-enterprise-{{VERSION}}-linux-x64.tar.gz进入解压后的子目录执行安装脚本sudo ./install.shWindows 安装步骤运行安装包按提示完成安装默认安装目录为C:\TDengine若选择的路径不以TDengine结尾安装器会在其下创建TDengine目录。升级安装沿用既有目录且不可更改。启动服务Linux 下执行sudo start-all.sh启动全部组件组件由 systemd 管理可逐一检查状态sudo systemctl status taosd sudo systemctl status taosadapter sudo systemctl status taoskeeper sudo systemctl status taos-explorer输出为Active: active (running) since ...即表示启动成功。Windows 下使用start-all.bat管理服务支持status、stop子命令-S选项可跳过连通性检查与 Snode/Xnode 初始化也可用sc query taosd等命令查看各 Windows 服务原始状态。方式三TDengine CloudTDengine Cloud 是基于 AWS / Azure / GCP 的全托管云服务注册账号即可获得试用额度无需自行部署即可体验 TSDB-Enterprise 的全部能力。注册流程包括访问云平台网站 → 注册邮箱与组织 → 设置密码8–20 位须包含字母、数字与特殊字符→ 选择 TSDB 实例类型、云厂商与区域 → 创建实例。详细步骤见 云服务快速入门。五分钟快速体验taos 命令行与 taosBenchmark部署完成后可以用taos命令行工具检查服务状态、执行 SQL、管理数据库与表。Linux/macOS 下直接运行taosWindows 下运行taos.exe进入 Shell 后提示符为taos每条 SQL 必须以分号;结尾。先做一个最小闭环验证CREATE DATABASE demo; USE demo; CREATE TABLE t (ts TIMESTAMP, speed INT); INSERT INTO t VALUES (2019-07-15 00:00:00, 10); INSERT INTO t VALUES (2019-07-15 01:00:00, 20); SELECT * FROM t;输出示例ts | speed | 2019-07-15 00:00:00.000 | 10 | 2019-07-15 01:00:00.000 | 20 | Query OK, 2 row(s) in set (0.003128s)用 taosBenchmark 生成百亿级测试数据taosBenchmark是 TDengine 自带的测试工具可模拟多设备数据支持配置数据库、超级表、标签列、数据列、子表数量、每表记录数、写入间隔、worker 线程数以及是否乱序写入。运行taosBenchmark -y该命令会在test库中自动创建超级表meters包含 10,000 个子表d0–d9999每表 10,000 条记录共约 1 亿条。每条记录含ts时间戳、current、voltage、phase四个字段时间戳范围为2017-07-14 10:40:00.000至2017-07-14 10:40:09.999每表还带location与groupId两个标签。在普通 PC 服务器上写入约需十秒左右。可用taosBenchmark --help查看全部参数完整参考见 taosBenchmark 参考。写入后立即体验查询性能SELECT COUNT(*) FROM test.meters; -- 输出 100000000约 0.075s SELECT AVG(current), MAX(voltage), MIN(phase) FROM test.meters; -- 全表 1 亿条记录聚合约 0.094s SELECT COUNT(*) FROM test.meters WHERE location California.SanFrancisco; -- 按标签过滤约 0.05s SELECT _wstart, AVG(current), MAX(voltage), MIN(phase) FROM test.d1001 INTERVAL(10s);其中_wstart是窗口查询的系统伪列表示每个窗口的起始时间。核心概念以智能电表为例TDengine 文档以智能电表为贯穿全篇的示例每只电表可采集current电流、voltage电压、phase相位三个指标同时拥有location位置与group_id分组 ID两个静态属性。示例数据如下设备 ID时间戳电流电压相位位置分组d1001153854868500010.32190.31California.SanFrancisco2d1002153854868400010.22200.23California.SanFrancisco3d1003153854868650011.52210.35California.LosAngeles3d1004153854868550013.42230.29California.LosAngeles2围绕这批数据需要理解以下核心概念Metric指标从传感器、设备等采集点获得的物理量电流、电压、温度等随时间变化、持续增长数据类型多样。Tag标签与采集点绑定的静态属性型号、位置等不随时间增长可增删改。数据采集点DCP按预设周期或事件触发采集指标的硬件/软件设备同一时刻可采集一个或多个指标共享同一时间戳。如汽车可包含定位、发动机状态、车内环境三类采集点。Table表TDengine 采用一设备一表设计每个采集点对应一张表表名通常即设备名如d1001。该设计的四大收益单表单写入者、无锁写入数据按时间有序、追加式写入数据块连续存储、减少随机读块内列式存储、按类型压缩。Supertable超级表将结构相同、标签不同的采集点聚合为逻辑统一表解决海量表管理问题。超级表必须含至少一个时间戳列、一个或多个指标列、一个或多个标签列标签可灵活增删改。Subtable子表超级表的具体实例由超级表模板 标签值生成。子表结构不可直接修改但修改超级表列与标签会立即作用于所有子表超级表本身只定义模板、不存数据。Virtual Table虚拟表不存储物理数据的逻辑实体查询时按时间戳动态合并多张源表的列。支持虚拟超级表/虚拟子表/虚拟普通表不可写入与删除使先写入、后建模成为现实。Database数据库表的集合容器一个实例可有多个数据库各库可配不同存储策略采集频率、保留期、副本数、数据块大小等建议将不同数据特征的超级表放入不同数据库。Timestamp时间戳TDengine 存储 UTC 时间戳。写入时 RFC-3339 格式字符串如2018-10-03T14:38:05.00008:00按时区正确解析为 UTC无时区信息的字符串按应用时区转换。查询时客户端按应用时区自动转回本地时间。数据建模从建库到虚拟表创建数据库CREATE DATABASE power PRECISION ms KEEP 3650 DURATION 10 BUFFER 16;参数含义PRECISION ms使用毫秒时间精度KEEP 3650数据保留 3650 天超期自动删除DURATION 10每 10 天数据存为一个数据文件BUFFER 16写入使用 16MB 内存池。创建后执行USE power;切换当前库。创建超级表CREATE STABLE meters ( ts timestamp, current float, voltage int, phase float ) TAGS ( location varchar(64), group_id int );规则要点第一列必须是时间戳列第二列起为指标列整型、浮点、字符串等TAGS后定义标签列标签名不能与指标列同名。CREATE STABLE等 DDL 语法在仓库的 SQL 解析器 中定义实现。创建子表CREATE TABLE d1001 USING meters ( location, group_id ) TAGS ( California.SanFrancisco, 2 );USING meters表示以超级表meters为模板TAGS括号内给出该子表的标签值。查询时可用伪列tbname指定或输出子表名。写入时自动建表即使子表不存在也可用带USING的INSERT语句在写入时自动建表子表不存在则先创建再写入已存在则直接写入INSERT INTO d1002 USING meters TAGS ( California.SanFrancisco, 2 ) VALUES ( NOW, 10.2, 219, 0.32 );基础表无标签表不依赖超级表的普通表与传统关系表类似可独立创建CREATE TABLE meter_n( ts timestamp, current float, voltage int, phase float, location varchar(64), group_id int );基础表与子表的差异子表在基础表之上增加了可变标签子表从属于超级表基础表独立存在两者不能互相转换。注意基础表模型会把静态标签重复存储于每行既增加存储又无法利用标签过滤查询性能明显低于超级表模型。多列模型与单列模型TDengine 推荐多列模型同一采集点同一时刻采集的多个物理量存入同一超级表的不同列写入与存储效率更优但当采集的物理量类型频繁变化时单列模型每种物理量建一张超级表可避免频繁修改表结构、简化应用设计。创建虚拟表两个典型场景场景一同源多维时序聚合——将同一采集点纵向拆分的多张单列表在虚拟表中恢复为横向完整视图。先按单列模型建三张超级表并建子表current_d1001、voltage_d1001、phase_d1001等再创建虚拟超级表CREATE STABLE meters_v ( ts timestamp, current float, voltage int, phase float ) TAGS ( location varchar(64), group_id int ) VIRTUAL 1;为设备 d1001 创建虚拟子表将各源表列映射进来CREATE VTABLE d1001_v ( current from current_d1001.current, voltage from voltage_d1001.voltage, phase from phase_d1001.phase ) USING meters_v TAGS ( California.SanFrancisco, 2 );写入原始数据后查询虚拟表SELECT * FROM d1001_v;TDengine 会按时间戳对齐各源表数据、缺失值以 NULL 填充例如时间戳1538548697100处只有 current 与 voltage 有值phase为 NULL时间戳电流电压相位153854868500010.32190.31153854869710012.1220NULL1538548697200NULLNULL0.32153854869770011.8NULLNULL场景二跨源指标对比分析——将不同采集点的同类指标横向对齐例如对比四台设备的电流CREATE VTABLE current_v ( ts TIMESTAMP, d1001_current FLOAT FROM current_d1001.current, d1002_current FLOAT FROM current_d1002.current, d1003_current FLOAT FROM current_d1003.current, d1004_current FLOAT FROM current_d1004.current );查询SELECT * FROM current_v;即得到按时间戳对齐的四列电流数据缺失时间点同样以 NULL 填充。虚拟表的核心特征即查询时才动态生成数据、只合并查询引用到的列因此同一虚拟表在不同查询中可呈现完全不同的数据集。数据写入SQL 的增删改与压缩查看写入前先准备好环境以下 SQL 可在 Shell 中直接执行CREATE DATABASE IF NOT EXISTS power PRECISION ms KEEP 3650 DURATION 10 BUFFER 16; USE power; CREATE STABLE IF NOT EXISTS meters ( ts timestamp, current float, voltage int, phase float ) TAGS (location varchar(64), group_id int); CREATE TABLE IF NOT EXISTS d1001 USING meters TAGS (California.SanFrancisco, 2); CREATE TABLE IF NOT EXISTS d1002 USING meters TAGS (California.SanFrancisco, 3); CREATE TABLE IF NOT EXISTS d1003 USING meters TAGS (California.LosAngeles, 2); CREATE TABLE IF NOT EXISTS d1004 USING meters TAGS (California.LosAngeles, 3);INSERT 的常用形态单行写入以下三种写法效果相同INSERT INTO d1001 (ts, current, voltage, phase) VALUES (2018-10-03 14:38:05, 10.3, 219, 0.31); INSERT INTO d1001 VALUES (2018-10-03 14:38:05, 10.3, 219, 0.31); INSERT INTO d1001 VALUES (1538548685000, 10.3, 219, 0.31); -- 数值时间戳库精度多行一次写入INSERT INTO d1001 VALUES (2018-10-03 14:38:05, 10.2, 220, 0.23), (2018-10-03 14:38:15, 12.6, 218, 0.33), (2018-10-03 14:38:25, 12.3, 221, 0.31);多表一次写入下例共写入 9 行INSERT INTO d1001 VALUES (2018-10-03 14:38:05, 10.2, 220, 0.23), (2018-10-03 14:38:15, 12.6, 218, 0.33), (2018-10-03 14:38:25, 12.3, 221, 0.31) d1002 VALUES (2018-10-03 14:38:04, 10.2, 220, 0.23), (2018-10-03 14:38:14, 10.3, 218, 0.25), (2018-10-03 14:38:24, 10.1, 220, 0.22) d1003 VALUES (2018-10-03 14:38:06, 11.5, 221, 0.35), (2018-10-03 14:38:16, 10.4, 220, 0.36), (2018-10-03 14:38:26, 10.3, 220, 0.33);指定列写入未出现的列填充 NULL但时间戳列必须出现且不能为 NULLINSERT INTO d1004 (ts, voltage, phase) VALUES (2018-10-04 14:38:06, 223, 0.29);自动建表 多表写入可只指定部分标签未指定的为 NULLINSERT INTO d1005 USING meters (location) TAGS (California.SanFrancisco) VALUES (2018-10-04 14:38:07, 10.15, 217, 0.33);直接向超级表写入超级表本身不存数据通过指定tbname将数据落到对应子表INSERT INTO meters (tbname, ts, current, voltage, phase, location, group_id) VALUES (d1001, 2018-10-03 14:38:05, 10.2, 220, 0.23, California.SanFrancisco, 2);注意虚拟表是动态生成的逻辑实体、不存储数据不支持写入。更新与删除TDengine 用同时间戳覆盖写实现更新以下 SQL 将d1001在2018-10-03 14:38:05的电流更新为 22INSERT INTO d1001 (ts, current) VALUES (2018-10-03 14:38:05, 22);删除异常数据删除不可逆建议先用相同WHERE条件的SELECT确认范围DELETE FROM meters WHERE ts 2021-10-01 10:40:00.100;完整的 INSERT / DELETE 语法与按列压缩配置分别见 数据写入、数据删除、数据压缩。查看压缩率与磁盘占用SELECT * FROM INFORMATION_SCHEMA.INS_DISK_USAGE WHERE db_name power; SHOW TABLE DISTRIBUTED d1001;前者查看数据库级压缩率与磁盘占用后者查看单表分布与压缩情况。更多信息见 数据库磁盘占用查看 与 SHOW TABLE DISTRIBUTED。其他写入通道除 SQL 外连接器支持 STMT / STMT2 参数绑定实现高吞吐写入参数绑定支持 InfluxDB / OpenTSDB 行协议的 Schemaless 写入可从报文自动建超级表与子表还可通过 Telegraf、Prometheus、EMQX、StatsD、collectd 等第三方工具实现 无代码数据接入。数据查询过滤、聚合与时间窗口分析TDengine 从首个版本起就支持标准 SQL 查询并针对时序场景扩展了标签过滤、按设备分区、多类时间窗口、插值与 JOIN 等能力。以下示例基于taosBenchmark -y生成的test库进入 Shell 后先USE test;。基本查询查询电压大于 250V 的d1子表数据按时间倒序取前 5 行SELECT tbname, ts, current, voltage FROM meters WHERE voltage 250 and tbname d1 ORDER BY ts DESC LIMIT 5;tbname是标识来源子表的伪列ORDER BY ts DESC按时间倒序LIMIT 5只返回前 5 行。按标签过滤标签描述设备静态属性可直接参与过滤也可与普通列条件组合SELECT tbname, ts, current, voltage, phase FROM meters WHERE location California.SanFrancisco AND voltage 250 ORDER BY ts DESC LIMIT 5;聚合查询全表聚合返回单行汇总SELECT AVG(voltage), MAX(voltage), COUNT(*) FROM meters; -- avg(voltage)243.9314, max(voltage)258, count(*)100000000按标签分组统计SELECT groupId, AVG(voltage) AS avg_voltage FROM meters GROUP BY groupId ORDER BY avg_voltage DESC;注意GROUP BY不保证固定顺序需排序时显式使用ORDER BY。按子表分区聚合PARTITION BY tbname先按子表维度切分再各自计算常用于每设备统计用SLIMIT限制返回分区数避免上万行输出SELECT tbname, AVG(voltage), COUNT(*) FROM meters PARTITION BY tbname SLIMIT 3;时间窗口查询窗口查询把数据按时间、状态、事件或行数切分后再计算。TDengine 支持多种窗口类型时间窗口INTERVAL按 1 秒窗口计算每表电压均值_wstart/_wend为窗口起止时间SELECT tbname, _wstart, _wend, AVG(voltage) FROM meters WHERE ts 2017-07-14 10:40:00 AND ts 2017-07-14 10:40:10 PARTITION BY tbname INTERVAL(1s) SLIMIT 2;滑动窗口SLIDING窗口 1 秒、每 500 毫秒滑动一次SELECT tbname, _wstart, AVG(voltage) FROM meters WHERE ts 2017-07-14 10:40:00 AND ts 2017-07-14 10:40:10 PARTITION BY tbname INTERVAL(1s) SLIDING(500a) SLIMIT 1;填充缺失窗口FILL用前一个非 NULL 值填充无数据的窗口SELECT _wstart, _wend, AVG(voltage) FROM d0 WHERE ts 2017-07-14 10:40:00 AND ts 2017-07-14 10:40:10 INTERVAL(1s) FILL(prev);状态窗口STATE_WINDOW状态变化即切窗如按电压是否处于 240V–250V 划分SELECT _wstart, _wend, COUNT(*), CASE WHEN voltage 240 AND voltage 250 THEN 1 ELSE 0 END AS status FROM d0 WHERE ts 2017-07-14 10:40:00 AND ts 2017-07-14 10:40:03 STATE_WINDOW( CASE WHEN voltage 240 AND voltage 250 THEN 1 ELSE 0 END ) LIMIT 4;会话窗口SESSION按相邻时间戳的间隔切窗间隔不超过 30 秒的归为同一会话SELECT _wstart, _wend, COUNT(*) FROM d0 WHERE ts 2017-07-14 10:40:00 AND ts 2017-07-14 10:40:10 SESSION(ts, 30s);事件窗口EVENT_WINDOW满足开始条件开窗、满足结束条件关窗SELECT _wstart, _wend, COUNT(*) FROM d0 WHERE ts 2017-07-14 10:40:00 AND ts 2017-07-14 10:40:10 EVENT_WINDOW START WITH voltage 250 END WITH voltage 245 LIMIT 4;计数窗口COUNT_WINDOW按固定行数分组如每 100 行一个窗口SELECT _wstart, _wend, COUNT(*) FROM d0 WHERE ts 2017-07-14 10:40:00 AND ts 2017-07-14 10:40:10 COUNT_WINDOW(100) LIMIT 5;外部窗口EXTERNAL_WINDOW窗口边界由子查询如事件表、排程表给出而非自动切分SELECT _wstart, _wend, AVG(voltage) FROM d0 EXTERNAL_WINDOW ( (SELECT CAST(2017-07-14 10:40:00 AS TIMESTAMP) AS ws, CAST(2017-07-14 10:40:01 AS TIMESTAMP) AS we UNION ALL SELECT CAST(2017-07-14 10:40:01 AS TIMESTAMP), CAST(2017-07-14 10:40:02 AS TIMESTAMP) ORDER BY ws) w );常用查询模式速查-- 子表最新一行 SELECT * FROM d0 ORDER BY ts DESC LIMIT 1; -- 按位置统计行数 SELECT location, COUNT(*) FROM meters GROUP BY location ORDER BY location; -- 每表最大电压SLIMIT 限制返回分区数 SELECT tbname, MAX(voltage) FROM meters PARTITION BY tbname SLIMIT 3; -- 时间范围平均电流 SELECT AVG(current) FROM meters WHERE ts 2017-07-14 10:40:00 AND ts 2017-07-14 10:40:10;查询能力的完整语法与进阶特性JOIN、窗口函数、UDF、读缓存、执行计划可继续参考 数据查询、运算符、函数、时序扩展、JOIN、窗口函数、UDF、读缓存 与 EXPLAIN。数据订阅像 Kafka 一样消费实时数据在监控告警、实时分析、数据同步等场景下下游程序往往需要第一时间拿到新写入的数据。TDengine 内置数据订阅能力按 topic 把持续写入的数据推送给下游省去轮询与额外引入消息队列的复杂度。topic 可以是数据库、超级表或既有表上的查询过滤与预处理由 TDengine 完成消费者可加入消费组共享进度数据从 WAL 推送采用至少一次at-least-once投递语义。以power库的meters超级表为例第一个 Shell 中创建查询 topicCREATE TOPIC IF NOT EXISTS topic_meters AS SELECT tbname, ts, current, voltage, phase FROM meters; SHOW TOPICS; -- 验证 topic 已创建打开第二个 Shell 订阅该 topicsubscribe topic_meters -g quickstart_cg;其中topic_meters是 topic 名-g quickstart_cg指定消费组——同组再次订阅时从已提交位置继续消费。执行后 Shell 显示Subscribing to topic [topic_meters], group [quickstart_cg], offset [latest] ...默认从最新位置开始。回到第一个 Shell 写入两条新数据INSERT INTO d1001 VALUES (NOW, 10.3, 219, 0.31); INSERT INTO d1002 VALUES (NOW, 10.2, 220, 0.23);第二个 Shell 中实时输出新写入的两行tbname、ts、current、voltage、phase。按CtrlC停止订阅Shell 会打印Unsubscribed. Total rows received: 2。订阅命令的通用格式为subscribe topic -g group_id [options];常用选项-o earliest从最早可消费位置开始适合回看存量数据-o latest从最新位置开始默认值适合实时等待新数据-n count收到指定行数后自动退出-t timeout_ms轮询超时。例如subscribe topic_meters -g quickstart_cg_earliest -o earliest -n 5; subscribe -h; -- 查看帮助该订阅命令的完整格式同样定义在 Shell 自动补全 中。查看与清理订阅资源SHOW TOPICS; SHOW CONSUMERS; SHOW SUBSCRIPTIONS; DROP CONSUMER GROUP IF EXISTS FORCE quickstart_cg ON topic_meters; DROP TOPIC IF EXISTS topic_meters;topic 语法、消费组与原生订阅 API 详见 Topic 语法、原生订阅、MQTT 订阅自 v3.3.7.0 起可通过连接 Bnode 的 MQTT 客户端订阅已有 topic与 多语言订阅 API。流处理用 SQL 实现实时聚合传统实时聚合、降采样与提前告警通常需要引入 Kafka、Flink 等流系统。TDengine 自带流处理能力可以用 SQL 定义实时计算逻辑数据写入后自动触发计算结果写入目标表或作为通知发送。核心设计是触发trigger与计算compute分离新流处理能力自 v3.3.7.0 起可用。以test库为例创建每分钟计算每只电表平均电流的流。前置条件是集群中已部署 snode流任务运行在 snode 上可用SHOW SNODES;查看没有则执行SHOW DNODES;与CREATE SNODE ON DNODE 1;部署。DROP STREAM IF EXISTS avg_current_stream; DROP STABLE IF EXISTS avg_current_stb; CREATE STREAM avg_current_stream INTERVAL(1m) SLIDING(1m) FROM meters PARTITION BY tbname, groupId STREAM_OPTIONS(FILL_HISTORY_FIRST | MAX_DELAY(3s)) INTO avg_current_stb OUTPUT_SUBTABLE(CONCAT(avg_, tbname)) TAGS ( groupId INT AS groupId ) AS SELECT _twstart AS ts, _twend AS window_end, AVG(current) AS avg_current FROM %%trows;各子句含义INTERVAL(1m) SLIDING(1m)每分钟触发一次计算FROM meters PARTITION BY tbname, groupId按子表触发并把groupId作为输出标签STREAM_OPTIONS(FILL_HISTORY_FIRST | MAX_DELAY(3s))先回放已写入的历史数据窗口打开约 3 秒后也会触发一次便于快速演示INTO avg_current_stb结果写入输出超级表OUTPUT_SUBTABLE(CONCAT(avg_, tbname))由源子表名拼接输出子表名如d0→avg_d0%%trows表示当前触发窗口内的数据行集合。查看流与结果SHOW STREAMS; SELECT * FROM information_schema.ins_streams WHERE stream_name avg_current_stream; SELECT tbname, groupId, ts, window_end, avg_current FROM avg_current_stb ORDER BY ts, tbname LIMIT 5;历史数据10:40:00–10:41:00窗口回放完成后写入新数据观察新窗口INSERT INTO d0 VALUES (2017-07-14 10:41:30, 12.4, 221, 147); INSERT INTO d0 VALUES (2017-07-14 10:42:00, 12.5, 220, 147); -- 事件时间关闭窗口无需 MAX_DELAY 也会触发稍候查询avg_d0的输出可看到10:41:00窗口的avg_current 12.400000已出现。流会持续运行只要meters有新数据且满足触发条件就继续计算。清理示例DROP STREAM IF EXISTS avg_current_stream; DROP STABLE IF EXISTS avg_current_stb;常用调整只处理新数据时去掉FILL_HISTORY_FIRST想更快看到结果可调大/保留MAX_DELAY或在下一窗口写入数据使事件时间关窗乱序写入、更新删除场景需结合WATERMARK与重算机制设计需要推送外部应用时用NOTIFY创建通知流。完整语法见 流处理语法运维与限制见 操作与限制设计实践见 部署与设计。更多可视化、监控与生态集成可视化管理ExplorerTDengine TSDB Explorer 是基于 Web 的可视化管理工具适合浏览库表对象、运行 SQL、查看客户端示例与发现集成工具。Docker 方式启动时已映射默认端口6060浏览器访问http://localhost:6060远程主机请替换localhost并确保安全组/防火墙放行。默认用户名root、密码taosdata首次登录可能需要先注册。登录后可打开数据浏览页查看数据库、超级表、子表与基础表并在 SQL 页执行查询。详见 可视化管理。Grafana 集成TDengine 提供 Grafana 插件与数据源可在 Grafana 中配置 TDengine 数据源、编写查询并制作仪表盘实现时序监控可视化参见 Grafana 集成。无代码数据接入通过 Telegraf、Prometheus、EMQX、StatsD、collectd、HiveMQ 等工具可直接接入数据企业版还提供 MQTT、OPC、AVEVA PI System、Wonderware、Kafka、MySQL、Oracle 等连接器配置后无需编写应用代码即可持续写入见 无代码数据接入。Shell 与工具taosCLI 与客户端驱动可单独安装到其他机器使用细节见 TDengine CLI。继续深入本文覆盖了快速入门阶段最常用的建库建表、写入、查询、订阅与流处理模式。后续可沿以下方向深入继续 基本概念、数据建模、数据写入、数据查询 四个章节的完整细节探索数据订阅06-data-subscription与流处理07-stream-processing的进阶能力阅读 TDengine SQL 参考中的 数据写入、数据删除、数据压缩 与 数据查询 获取完整语法通过 参数绑定 与 Schemaless 写入 提升应用写入吞吐。【免费下载链接】tdengineTDengine is an open source, high-performance, cloud native time-series database optimized for Internet of Things (IoT), Connected Cars, Industrial IoT and DevOps.项目地址: https://gitcode.com/taosdata/tdengine创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询