从EdgeX到TDengine数据持久化(下)

ProgrammerHe2021 2021-09-01 20:21:51

前言

hi ,上一次我们已经在Kuiper创建了规则,这次装好插件将数据持久化到TDengine

 

TDengine是什么

TDengine是涛思数据专为物联网、车联网、工业互联网、IT运维等设计和优化的大数据平台。除核心的快10倍以上的时序数据库功能外,还提供缓存、数据订阅、流式计算等功能,最大程度减少研发和运维的复杂度,且核心代码,包括集群功能全部开源。官网地址: https://www.taosdata.com/cn/ ; GitHub地址: https://github.com/taosdata/TDengine

 

TDengine中的超级表是什么,有什么用?跟传统的查询有什么不同?

现在我们来想象一个场景,如果一间房子里面有许多温湿度计。每一个温湿度计有一张表,那怎么知道哪一张表是哪个设备呢?如果要查询某个区域的温湿度计,一张表一张表的查好像有点麻烦。TDengine的超级表就是用来解决这个问题的。我们下面用一个房子有若干个温湿度计分布在卧室、厕所、阳台这些地方。

创建超级表&使用超级表做模板建表

taos> create stable sensordata (time timestamp,temperature float,humidity float) tags (location binary(64));
Query OK, 0 of 0 row(s) in database (0.002387s)

taos> create table t1 using sensordata tags("bedroom");
Query OK, 0 of 0 row(s) in database (0.009156s)

taos> create table t2 using sensordata tags("bedroom");
Query OK, 0 of 0 row(s) in database (0.003948s)

taos> create table t3 using sensordata tags("balcony");
Query OK, 0 of 0 row(s) in database (0.002927s)

taos> create table t4 using sensordata tags("toilet");
Query OK, 0 of 0 row(s) in database (0.002632s)
  1. 创建的超级表里有字段时间戳、温度和湿度。标签是地点。我们用超级表sensordata作为模板创建表t1234,并写上不同的标签。

  2. 向几张表中添加数据。

insert into t1 values(now,27.1,70.1);
insert into t2 values(now,22.1,67.1);
insert into t3 values(now,23.1,64.1);
insert into t4 values(now,24.1,64.1);
  1. 查询超级表的数据

taos> select * from sensordata;
          time           |     temperature      |       humidity       |            location            |
=========================================================================================================
 2021-09-01 03:52:59.525 |             27.10000 |             29.00000 | bedroom                        |
 2021-09-01 03:53:06.922 |             27.10000 |             70.10000 | bedroom                        |
 2021-09-01 03:53:07.846 |             27.10000 |             70.10000 | bedroom                        |
 2021-09-01 03:53:08.497 |             27.10000 |             70.10000 | bedroom                        |
 2021-09-01 03:53:08.981 |             27.10000 |             70.10000 | bedroom                        |
 2021-09-01 03:53:10.409 |             27.10000 |             70.10000 | bedroom                        |
 2021-09-01 03:53:22.031 |             22.10000 |             67.10000 | bedroom                        |
 2021-09-01 03:53:23.280 |             22.10000 |             67.10000 | bedroom                        |
 2021-09-01 03:53:23.729 |             22.10000 |             67.10000 | bedroom                        |
 2021-09-01 03:53:24.156 |             22.10000 |             67.10000 | bedroom                        |
 2021-09-01 03:53:24.580 |             22.10000 |             67.10000 | bedroom                        |
 2021-09-01 03:53:25.380 |             22.10000 |             67.10000 | bedroom                        |
 2021-09-01 03:55:35.627 |             22.10000 |             67.10000 | balcony                        |
 2021-09-01 03:55:36.131 |             22.10000 |             67.10000 | balcony                        |
 2021-09-01 03:55:36.593 |             22.10000 |             67.10000 | balcony                        |
 2021-09-01 03:55:37.086 |             22.10000 |             67.10000 | balcony                        |
 2021-09-01 03:55:37.683 |             22.10000 |             67.10000 | balcony                        |
 2021-09-01 03:55:39.144 |             22.10000 |             67.10000 | balcony                        |
 2021-09-01 03:55:47.134 |             24.10000 |             64.10000 | toilet                         |
 2021-09-01 03:55:47.650 |             24.10000 |             64.10000 | toilet                         |
 2021-09-01 03:55:48.023 |             24.10000 |             64.10000 | toilet                         |
 2021-09-01 03:55:48.327 |             24.10000 |             64.10000 | toilet                         |
 2021-09-01 03:55:48.599 |             24.10000 |             64.10000 | toilet                         |
 2021-09-01 03:55:49.114 |             24.10000 |             64.10000 | toilet                         |
Query OK, 24 row(s) in set (0.010163s)

STable多表聚合

  • 按照标签聚合查询——我们要查询卧室里最高的温度和最低的湿度。可以用标签聚合查询

taos> select MAX(temperature),MIN(humidity) from sensordata  where location='bedroom' group by location;
   max(temperature)   |    min(humidity)     |            location            |
===============================================================================
             27.10000 |             29.00000 | bedroom                        |
Query OK, 1 row(s) in set (0.004057s)
  • 按时间周期聚合查询——查询一天之内卧室的平均温度。

taos> select AVG(temperature) from sensordata  where location='bedroom' and time >=now-1d  group by location;
     avg(temperature)      |            location            |
=============================================================
              24.600000381 | bedroom                        |
Query OK, 1 row(s) in set (0.002941s)

 

kuiper和TDengine的插件

一般来说发送数据到EdgeX,最后将发送的数据持久化,一般有几种导出的形式。例如听过REST导出,或者MQTT导出,如果选择MQTT导出则需要一个MQTT Broker,在MQTT Broker接收到数据之后再制定规则将数据持久化发送到时序数据库。而使用kuiper的TDengine插件则不需要经过这种过程,可以通过kuiper制定规则,将数据导出到TDengine中去。

两种安装方式

  1. 自动安装

curl -d "{\"name\":\"tdengine\",\"file\":\"https://packages.emqx.io/kuiper-plugins/1.2.1/debian/sinks/tdengine_amd64.zip\",\"shellParas\": [\"2.0.20.10\"]}" http://127.0.0.1:59720/plugins/sinks

kuiper插件的下载地址已经改变,TDengine client的下载地址也已经发生改变

https://packages.emqx.io/kuiper-plugins/1.X.X/debian/sinks/tdengine_amd64.zip

之前我使用自动安装的,一条指令就可以完成了。在输入CURL指令的时候要指定TDengine的版本。在本次demo中使用的是2.0.20.10版本。但现在问题就在于.. 不知道为啥会报错。这时候我们可以进行手动安装。

  • 手动安装

    1. 手动安装的大致步骤是将TDengine的插件下载下来并解压,并将解压出来的so文件移动到ekuiper容器中的kuiper/plugins/sinks里面。完成这一步之后再安装相应的TDengine版本。(执行install.sh脚本安装TDengine客户端)

    2. 因为在docker容器内部执行一些操作不太方便(如缺少unzip,权限问题等),因为我们先将TDengine的zip包下载下来并解压。解压出来之后是一个后缀为.so的文件

    3. 之后将文件复制到容器内部中。docker cp tdengine@1.2.1.so edgex-kuiper:/kuiper/plugins/sinks

    4. 下载TDengine客户端,手动下载https://raw.githubusercontent.com/lf-edge/ekuiper/master/extensions/sinks/tdengine/install.sh。然后在容器内执行 sh install.sh 2.0.20.10

      1. 这里有一个小细节,如果一直用的是官方提供的docker-compose.yml镜像文件,可能会导致不能在容器的根目录执行任何东西。于是要在docker-compose.yml那份文件中找到ekuiper,然后将read_only=true注释掉。

      2. Install.sh文件可能会因为权限不够而不能执行,所以要赋予其权限chmod 777 install.sh

    5. 验证安装是否成功; 执行 curl http://127.0.0.1:59720/plugins/sinks/tdengine

root@u20:/home/TDengineplugin# wget https://packages.emqx.io/kuiper-plugins/1.2.1/debian/sinks/tdengine_amd64.zip
--2021-08-25 19:18:21--  https://packages.emqx.io/kuiper-plugins/1.2.1/debian/sinks/tdengine_amd64.zip
Resolving packages.emqx.io (packages.emqx.io)... 18.65.159.105, 18.65.159.95, 18.65.159.25, ...
Connecting to packages.emqx.io (packages.emqx.io)|18.65.159.105|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 4178611 (4.0M) [application/zip]
Saving to: ‘tdengine_amd64.zip’

tdengine_amd64.zip                                         100%[======================================================================================================================================>]   3.98M  30.4KB/s    in 3m 26s  

2021-08-25 19:21:48 (19.8 KB/s) - ‘tdengine_amd64.zip’ saved [4178611/4178611]

root@u20:/home/TDengineplugin# unzip tdengine_amd64.zip 
Archive:  tdengine_amd64.zip
  inflating: tdengine@1.2.1.so       

root@u20:/home/TDengineplugin# curl http://127.0.0.1:59720/plugins/sinks/tdengine
{"name":"tdengine","version":"1.2.1"}
  • 然后我们通过Event事件向EdgeX发送数据。上面我们已经创建好规则了,所以发送数据之后kuiper会匹配到温湿度数据,然后将数据持久化到TDengine

7. 查询TDengine,我们回发现刚才发送的数据已经有了

taos> select * from sensordata  where time > now - 10m;
          time           |     temperature      |       humidity       |
========================================================================
 2021-08-26 02:40:26.864 |             12.20000 |             25.10000 |
Query OK, 1 row(s) in set (0.004565s)

写在最后

连着上一篇笔记,我们的将 发送事件 --> EdgeX --> rule-engine (kuiper)--> TDengine这条路走了一遍,但实际上应用起来还没完。下一篇笔记我们介绍一下TDengine跟Grafana图表整合起来能怎用吧。如果你觉得文章对你有点帮助,或者觉得写得还可以,欢迎关注公众号 ProgrammerHe 。写得不好/不对的地方烦请指出,谢谢。

...全文
946 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

23,622

社区成员

发帖
与我相关
我的任务
社区描述
EdgeX Foundry 是一个由Linux基金会主持,供应商中立的边缘计算开源项目,旨在为物联网边缘计算提供开放、可扩展的平台。
人工智能edge边缘计算 企业社区 上海·浦东新区
社区管理员
  • EdgeX中文社区
  • 亿琪软件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
EdgeX Foundry 微信官方公众号 (EdgeXFoundryCN) 【优质内容,全站网罗】 持续聚集沉淀来自社区的 EdgeX Foundry 专业内容和资源,点击首页右侧“关注社区”,参与到社区里来吧! 【进阶学习,技术交流】 欢迎在社区的“问答”频道发帖提问,优质回答者将有机会登上社区光荣榜,获得 CSDN 积分,EdgeX 社区头衔等奖励! 【投稿贡献,成为大牛】 我们诚挚邀请你成为社区贡献者,发布优质的自产内容或翻译内容,优质投稿者将有机会登上社区光荣榜,获得 CSDN 积分,EdgeX 社区头衔等奖励!

试试用AI创作助手写篇文章吧