未验证 提交 05159cc9 编写于 作者: S Shengliang Guan 提交者: GitHub

Merge branch 'develop' into hotfix/mergemaster

......@@ -15,6 +15,9 @@ TDengine的模块之一是时序数据库。但除此之外,为减少研发的
采用TDengine,可将典型的物联网、车联网、工业互联网大数据平台的总拥有成本大幅降低。但需要指出的是,因充分利用了物联网时序数据的特点,它无法用来处理网络爬虫、微博、微信、电商、ERP、CRM等通用型数据。
<center> <img src="../assets/EcoSystem.png"> </center>
<center>图 1. TDengine技术生态图</center>
## TDengine 总体适用场景
作为一个IOT大数据平台,TDengine的典型适用场景是在IOT范畴,而且用户有一定的数据量。本文后续的介绍主要针对这个范畴里面的系统。范畴之外的系统,比如CRM,ERP等,不在本文讨论范围内。
......
......@@ -12,7 +12,7 @@ TDengine 采用 SQL 作为查询语言。应用程序可以通过 C/C++, Java, G
- 标签和数值的多种过滤条件:\>, \<, =, \<>, like 等
- 聚合结果的分组(Group by)、排序(Order by)、约束输出(Limit/Offset)
- 数值列及聚合结果的四则运算
- 时间戳对齐的连接查询(Join Query)操作
- 时间戳对齐的连接查询(Join Query: 隐式连接)操作
- 多种聚合/计算函数: count, max, min, avg, sum, twa, stddev, leastsquares, top, bottom, first, last, percentile, apercentile, last_row, spread, diff等
例如:在TAOS Shell中,从表d1001中查询出vlotage > 215的记录,按时间降序排列,仅仅输出2条。
......
<svg xmlns="http://www.w3.org/2000/svg" role="img" viewBox="-5.86 -5.86 304.72 93.47"><title>TDengine logo</title><g data-name="图层 2"><path fill="#718cc7" fill-rule="evenodd" d="M288.45 43.86q0 2.49-3 4.52-1.49 1-4.18 2.76A7.12 7.12 0 0 1 278 52h-20c-.72 0-1.28-.48-1.69-1.42a3.61 3.61 0 0 1-.13-1.35 5.64 5.64 0 0 1 .1-1.31A2.17 2.17 0 0 1 257 47a1.7 1.7 0 0 1 1-.54h16.77a5 5 0 0 0 3.2-1.55 6 6 0 0 0 2-3.16c.05-.36.07-1.37.07-3s0-2.76-.07-3a6.31 6.31 0 0 0-2.09-3.2 4.9 4.9 0 0 0-3.16-1.52h-8.02a8.39 8.39 0 0 1-4.18-1.35q-.4-.27-4.31-3a6 6 0 0 1-1.08-1.07 4.2 4.2 0 0 1-.94-2.63v-9q0-2.49 3.1-4.51c1.07-.76 2.47-1.68 4.17-2.76a7.43 7.43 0 0 1 3.37-.81h19.67a2.07 2.07 0 0 1 1.88 1.42 6.38 6.38 0 0 1 .07 1.34 5.63 5.63 0 0 1-.1 1.28 2.22 2.22 0 0 1-.67 1 1.64 1.64 0 0 1-1.05.54h-16.7a5.08 5.08 0 0 0-3.3 1.58 5.3 5.3 0 0 0-1.95 2.94 18.73 18.73 0 0 0-.14 3 16 16 0 0 0 .2 3.37 6.84 6.84 0 0 0 2.12 2.93 4.89 4.89 0 0 0 3.07 1.45H278a8.15 8.15 0 0 1 4.18 1.41q.4.2 4.24 3a4 4 0 0 1 1.68 2.06 6.18 6.18 0 0 1 .34 1.65v9zM42.62 0A5.58 5.58 0 1 1 37 5.58 5.59 5.59 0 0 1 42.62 0zm-37 26.81A5.58 5.58 0 1 1 0 32.39a5.58 5.58 0 0 1 5.58-5.58zm14.5 43.62A5.58 5.58 0 1 1 14.5 76a5.6 5.6 0 0 1 5.58-5.58zm45.09 0A5.58 5.58 0 1 1 59.59 76a5.59 5.59 0 0 1 5.58-5.58zM50.8 33.23H34.44l-5 15.56 13.19 9.61 13.21-9.6-5-15.57zM34.87 31.9l5.73-17.64a7.4 7.4 0 0 1-1.26-.4l-5.86 18h-19v1.33h18.57L28.26 48 13.19 37a8.31 8.31 0 0 1-.77 1.07l12.81 9.33 2.6 1.89-.83 2.48-5 15.53a7.76 7.76 0 0 1 1.27.38L29 50.1l12.5 9.12L26.66 70a10.12 10.12 0 0 1 .82 1l15.15-11 15.14 11a8.15 8.15 0 0 1 .82-1L43.75 59.22l12.52-9.1.54 1.67L62 67.67a8.85 8.85 0 0 1 1.27-.37l-5.85-18L60 47.42l12.83-9.32a10 10 0 0 1-.77-1.1l-12.47 9-.35.26L57 48l-4.82-14.77h18.61a8.06 8.06 0 0 1 0-.85v-.47h-19l-5.85-18a7.4 7.4 0 0 1-1.26.4l5.73 17.65zm-22.28-5l22.59-16.43a8.16 8.16 0 0 0 .81 1L13.33 28a8.46 8.46 0 0 0-.74-1.1zm4.07 40.88L8 41a8.72 8.72 0 0 0 1.24-.45l8.72 26.83a10.9 10.9 0 0 0-1.26.41zm39.6 8.6H29v-.36a7.89 7.89 0 0 0-.06-1H56.3V76.38zM77.29 41l-8.71 26.8a8.74 8.74 0 0 0-1.25-.42L76 40.53a8.84 8.84 0 0 0 1.25.45zM50.07 10.47l22.59 16.42a9.08 9.08 0 0 0-.74 1.11L49.26 11.52a10.46 10.46 0 0 0 .81-1zm29.6 16.34a5.58 5.58 0 1 1-5.58 5.58 5.58 5.58 0 0 1 5.58-5.58zM290.07 45V33.69a5.15 5.15 0 0 0-.37-1.48 3.06 3.06 0 0 0-.64-1.21c-1.4-1.08-2.81-2.16-4.25-3.23-2.47-1.75-4.37-2.63-5.72-2.63h-8.76a4.11 4.11 0 0 1-1.08-.24 5 5 0 0 1-1.85-1.41 3.29 3.29 0 0 1-1.11-1.92c-.09-1.57-.13-2.43-.13-2.56a14.37 14.37 0 0 1 .13-2.56 4.42 4.42 0 0 1 1.55-2.36 3.94 3.94 0 0 1 2.49-1.21h17.51a1.86 1.86 0 0 0 2-1.41 12.22 12.22 0 0 0 .21-3c0-2.15-.18-3.42-.54-3.8a2.43 2.43 0 0 0-1.82-.57h-22c-1.48 0-3.34.8-5.59 2.42-1.16.81-2.6 1.86-4.31 3.17a3.73 3.73 0 0 0-1.21 3V24a3.78 3.78 0 0 0 .94 2.7 43.57 43.57 0 0 0 3.64 2.76q4.3 3.11 6.33 3.1h8.82q2 0 3.91 3a2.31 2.31 0 0 1 .13.54 17.07 17.07 0 0 1 .14 2.56 18.92 18.92 0 0 1-.14 2.52 4.44 4.44 0 0 1-1.34 2.26 4.06 4.06 0 0 1-2.7 1.35h-17.52a1.91 1.91 0 0 0-1.68.6 9.3 9.3 0 0 0-.47 3.77 9 9 0 0 0 .44 3.71 1.89 1.89 0 0 0 1.71.67h22.3q2.09 0 6-2.76l3.76-2.78a3.75 3.75 0 0 0 1.22-3zm1.93 1V32.75a4.26 4.26 0 0 0-1.41-3.17c-1.8-1.48-3.19-2.55-4.18-3.23-2.83-2.06-4.94-3.1-6.33-3.1h-8.82a3.25 3.25 0 0 1-1.92-.77 2.69 2.69 0 0 1-1.18-1.85c-.05-.54-.07-1.08-.07-1.62a15.09 15.09 0 0 1 .07-1.62 2.81 2.81 0 0 1 1.28-1.88 2.94 2.94 0 0 1 1.82-.68h17.51a3 3 0 0 0 2.22-1 3.09 3.09 0 0 0 1-2.12V5.34a2.77 2.77 0 0 0-1.08-2.19 3.48 3.48 0 0 0-2.29-.91h-23.88a6.16 6.16 0 0 0-3.1.81c-2.15 1.39-3.72 2.45-4.71 3.16-2.83 1.93-4.24 3.78-4.24 5.53v13.2a4.24 4.24 0 0 0 1.41 3.16q3.11 2.56 4.72 3.64c2.46 1.8 4.4 2.69 5.79 2.69h8.82a3.21 3.21 0 0 1 1.95.78A2.57 2.57 0 0 1 276.5 37c.06.69.1 1.24.1 1.65a9.73 9.73 0 0 1-.14 1.61 2.58 2.58 0 0 1-1.14 1.86 3.38 3.38 0 0 1-1.89.7h-17.58a3 3 0 0 0-2.19 1 3.16 3.16 0 0 0-1 2.23v6.19a3.34 3.34 0 0 0 3.16 3.17h24.28a9 9 0 0 0 1.55-.2 11 11 0 0 0 3.16-1.62c1-.72 2-1.44 2.9-2.16Q292 48.65 292 46zm-64.91-6.2V17.93a3 3 0 0 0-.78-1.88 3.1 3.1 0 0 0-1.85-1.15c-.4 0-.94-.07-1.62-.07s-1.19 0-1.68.07a2.94 2.94 0 0 0-1.82 1.18 3.21 3.21 0 0 0-.74 1.92v21.69a3.15 3.15 0 0 0 .74 2 3 3 0 0 0 1.82 1.15q.54.06 1.68.06a16 16 0 0 0 1.62-.06 3.16 3.16 0 0 0 2-1.28 3.36 3.36 0 0 0 .61-1.76zm1.95 1a3.91 3.91 0 0 1-1.28 2.46 4.76 4.76 0 0 1-2.29 1.58c-.49 0-1.37.07-2.63.07-1 0-1.86 0-2.62-.07a3.76 3.76 0 0 1-1.89-1.11 5.13 5.13 0 0 1-1.41-1.79 3.6 3.6 0 0 1-.27-1.14V17a3.93 3.93 0 0 1 1.35-2.5 3.92 3.92 0 0 1 2.24-1.5c.94-.09 1.82-.14 2.62-.14a12.54 12.54 0 0 1 2.63.14 5.71 5.71 0 0 1 2.42 1.61 3.52 3.52 0 0 1 1.15 2.39v23.7zm1.55.4a5.11 5.11 0 0 1-1.79 3.37c-1.19 1.21-2.14 1.82-2.86 1.82l-1.65.06-1.45.07a19 19 0 0 1-3.43-.2 6.46 6.46 0 0 1-3-2.22 4.59 4.59 0 0 1-1.35-2.9V16.65a4.92 4.92 0 0 1 1.75-3.36 5.23 5.23 0 0 1 3-1.89 22 22 0 0 1 3.09-.13 17.61 17.61 0 0 1 3.44.2 5.91 5.91 0 0 1 2.83 2 5 5 0 0 1 1.48 3.07V41.1zm8.41 2.66q0 2.49-3 4.52-1.49 1-4.18 2.76a7.12 7.12 0 0 1-3.23.81h-12.66q-3.7 0-8-4.85a4.43 4.43 0 0 1-1.21-3.17V13.82q0-2.49 3.1-4.51c1.07-.76 2.47-1.68 4.17-2.76a7.43 7.43 0 0 1 3.37-.81h11A9 9 0 0 1 233 7.29a42.19 42.19 0 0 1 4.72 3.5 3.73 3.73 0 0 1 1.21 3v30zm1.58 1.14a3.75 3.75 0 0 1-1.22 3l-3.77 2.83q-3.9 2.76-6 2.76h-14.81a7 7 0 0 1-3.84-1.48q-.87-.6-4-3.3a4.7 4.7 0 0 1-.74-.81 5 5 0 0 1-1-2.89V12.68a3.73 3.73 0 0 1 1.21-3c1.71-1.31 3.15-2.36 4.31-3.17 2.25-1.62 4.11-2.42 5.59-2.42h13.2a9.52 9.52 0 0 1 5.12 2c.32.22 1.91 1.44 4.78 3.64a3.46 3.46 0 0 1 .78 1.31 4.71 4.71 0 0 1 .44 1.65V45zm1.95.94q0 2.7-4.31 5.52c-.94.72-1.91 1.44-2.9 2.16a11 11 0 0 1-3.16 1.62 9 9 0 0 1-1.55.2h-16.77q-3.84 0-9.57-6.47a4.33 4.33 0 0 1-1.07-3V11.74c0-1.75 1.41-3.6 4.24-5.53 1-.71 2.56-1.77 4.71-3.16a6.16 6.16 0 0 1 3.1-.81h15.16q2.49 0 6.13 2.76a42.2 42.2 0 0 1 4.71 3.71 4.81 4.81 0 0 1 1.28 3V46zM177.62 19c0-2.78-1.42-4.18-4.25-4.18s-4.24 1.4-4.24 4.18 1.41 4.24 4.24 4.24 4.25-1.41 4.25-4.24zm1.95 0a10 10 0 0 1-.3 3.17 7 7 0 0 1-1.42 1.75 3.47 3.47 0 0 1-1.85 1.15c-.81.05-1.68.07-2.63.07a14 14 0 0 1-3-.2 5.18 5.18 0 0 1-1.89-1.42 3.33 3.33 0 0 1-1.18-1.95c-.09-1.35-.13-2.2-.13-2.56a13.39 13.39 0 0 1 .2-3 4.75 4.75 0 0 1 1.41-1.89 3.36 3.36 0 0 1 2-1.14c1.39-.09 2.26-.14 2.62-.14a14.25 14.25 0 0 1 3 .2 5 5 0 0 1 1.88 1.38 3.72 3.72 0 0 1 1.22 2 24.55 24.55 0 0 1 .13 2.56zm1.55 0a14.45 14.45 0 0 1-.34 3.91 7 7 0 0 1-3.5 3.5 12.62 12.62 0 0 1-3.91.34 14.83 14.83 0 0 1-3.43-.21 6.39 6.39 0 0 1-2.7-1.81A5.33 5.33 0 0 1 165.7 22a19.12 19.12 0 0 1-.14-3 17.27 17.27 0 0 1 .2-3.37 6.07 6.07 0 0 1 1.85-2.63 4.82 4.82 0 0 1 2.66-1.58c1-.09 2-.13 3.1-.13a17.61 17.61 0 0 1 3.44.2 6.35 6.35 0 0 1 2.66 1.82 4.92 4.92 0 0 1 1.58 2.69c0 .58.07 1.59.07 3zm8.35 31.12a1.76 1.76 0 0 1-1.35 1.75c-.22 0-1.16.07-2.83.07-1.48 0-2.36 0-2.66-.07a1.81 1.81 0 0 1-1-.71 1.84 1.84 0 0 1-.54-1V36.25a5 5 0 0 0-1.52-3.2 5.5 5.5 0 0 0-3.13-2 19.89 19.89 0 0 0-3.1-.14c-1.39 0-2.42 0-3.1.1a4.09 4.09 0 0 0-2.22 1.25q-2.49 2.22-2.49 4v13.87a1.93 1.93 0 0 1-.44 1 1.53 1.53 0 0 1-.91.74 19.92 19.92 0 0 1-2.83.11c-1.48 0-2.36 0-2.66-.07a1.81 1.81 0 0 1-1-.71 1.84 1.84 0 0 1-.54-1V16.38q0-2.35 2.42-5 1.89-1.89 3.78-3.7c.09-.09.44-.36 1.07-.81a5.84 5.84 0 0 1 3.57-1.15h10.64a7 7 0 0 1 4.58 2c.54.44 2.09 2 4.65 4.71a5.69 5.69 0 0 1 1.55 4v33.7zm1.62 1.21a2.81 2.81 0 0 1-.44 1.55 2 2 0 0 1-1.79.67h-7.13a2.47 2.47 0 0 1-1.55-.47 2.09 2.09 0 0 1-.61-1.75V36.66a3.8 3.8 0 0 0-1.38-2.66 4.19 4.19 0 0 0-2.26-1.41c-.94 0-1.79-.07-2.56-.07a16 16 0 0 0-3 .2 4.23 4.23 0 0 0-1.65 1.14 5.52 5.52 0 0 0-1.31 1.69 3.11 3.11 0 0 0-.27 1.08v14.71a2.81 2.81 0 0 1-.44 1.55 2 2 0 0 1-1.79.67h-7.14a2.46 2.46 0 0 1-1.54-.47 2.09 2.09 0 0 1-.61-1.75v-36.1a5.21 5.21 0 0 1 .81-2.7 8.46 8.46 0 0 1 .81-1.07Q159.64 9 162 6.55c1.8-1.62 3.44-2.42 4.92-2.42h12.93a6.79 6.79 0 0 1 4.38 2l4.58 4.58 1.14 1.34a4.89 4.89 0 0 1 1.15 3.17v36.1zm1.95 1a3 3 0 0 1-1 2.09 3.09 3.09 0 0 1-2.22 1h-9a3.07 3.07 0 0 1-2.15-1 3 3 0 0 1-1-2.19V37.67a3.21 3.21 0 0 0-.74-1.92 3 3 0 0 0-1.93-1.18 7.65 7.65 0 0 0-1.62-.14 14.71 14.71 0 0 0-1.68.14 2.64 2.64 0 0 0-1.82 1.11 3.21 3.21 0 0 0-.74 1.92v14.75a3 3 0 0 1-1 2.09 3.09 3.09 0 0 1-2.22 1h-9a3.34 3.34 0 0 1-3.16-3.17v-38a5.21 5.21 0 0 1 .81-2.7c.17-.27.44-.65.8-1.14 1.75-1.75 3.51-3.53 5.26-5.32q3-2.89 5.38-2.9h14.82a5.42 5.42 0 0 1 4 1.62l5.11 5Q193 12.28 193 14.3v38.05zM141.8 8.5a5.63 5.63 0 0 1-.1 1.28 2.17 2.17 0 0 1-.68 1 1.62 1.62 0 0 1-1 .54h-5.39a5.15 5.15 0 0 0-3.53 1.88 5.25 5.25 0 0 0-1.86 3.44v33.49a2 2 0 0 1-.43 1 1.61 1.61 0 0 1-.88.74 12.82 12.82 0 0 1-2.19.11 19.35 19.35 0 0 1-2.09-.07 1.86 1.86 0 0 1-.94-.68 1.72 1.72 0 0 1-.54-1.07V16.65a5.19 5.19 0 0 0-1.88-3.53 5.25 5.25 0 0 0-3.44-1.85h-5.45c-.72 0-1.28-.45-1.69-1.35a4.32 4.32 0 0 1-.13-1.42 3.58 3.58 0 0 1 .13-1.34 2.17 2.17 0 0 1 1.89-1.42h28.29a2.08 2.08 0 0 1 1.88 1.42 6.38 6.38 0 0 1 .07 1.34zm1.62 0c0-2.15-.18-3.42-.54-3.8a2.43 2.43 0 0 0-1.82-.57h-30.71a2.09 2.09 0 0 0-2.23 1.41 18.24 18.24 0 0 0-.13 3c0 2 .14 3.26.44 3.71a1.89 1.89 0 0 0 1.71.67h6.27a2.73 2.73 0 0 1 1.61.47q2.57 1.89 2.56 3.64v34.31a2.12 2.12 0 0 0 .61 1.75 2.47 2.47 0 0 0 1.55.47h5.86a2 2 0 0 0 1.78-.67 2.81 2.81 0 0 0 .44-1.55V17a4.19 4.19 0 0 1 1.38-2.63 3.93 3.93 0 0 1 2.8-1.48h6.19a1.87 1.87 0 0 0 2-1.41 12.22 12.22 0 0 0 .21-3zM287.72 76l-2.93-5.6a.52.52 0 0 0-.5-.3.54.54 0 0 0-.51.3l-3 5.6a.58.58 0 0 0 0 .62.62.62 0 0 0 .55.31h5.83a.62.62 0 0 0 .54-.31.56.56 0 0 0 0-.62zm5.46 6h-2.26c-.11-.19-.54-1-1.3-2.45a1.35 1.35 0 0 0-1.27-.79h-8.15a1.36 1.36 0 0 0-1.29.79L277.66 82h-2.28l7.49-14.15h2.81q.26.45 7.5 14.15zM240 69.7h-6.1a.94.94 0 0 0-1 .93V82h-1.82V70.63a.94.94 0 0 0-.93-.93h-6.08v-1.84H240v1.84zM183.28 76l-2.93-5.6a.52.52 0 0 0-.5-.3.54.54 0 0 0-.51.3l-3 5.6a.58.58 0 0 0 0 .62.61.61 0 0 0 .55.31h5.83a.62.62 0 0 0 .54-.31.58.58 0 0 0 0-.62zm5.46 6h-2.26c-.11-.19-.54-1-1.3-2.45a1.35 1.35 0 0 0-1.27-.79h-8.15a1.36 1.36 0 0 0-1.29.79L173.22 82h-2.28l7.49-14.15h2.81l7.5 14.15zm-55-7a5 5 0 0 0-1.56-3.85 5.61 5.61 0 0 0-4-1.45h-6.38a.91.91 0 0 0-.66.28 1 1 0 0 0-.27.67v8.63a.94.94 0 0 0 .27.68.9.9 0 0 0 .66.27h6.89a5 5 0 0 0 3.66-1.44 5.14 5.14 0 0 0 1.43-3.79zm1.8.06a6.46 6.46 0 0 1-2.29 5.09A7.66 7.66 0 0 1 128 82h-9V67.88h8.51a8.41 8.41 0 0 1 5.85 2 6.71 6.71 0 0 1 2.15 5.2zm9.79-63.37V5.34a2.77 2.77 0 0 0-1.08-2.19 3.48 3.48 0 0 0-2.25-.91h-32.6a3.44 3.44 0 0 0-2.32.91 2.87 2.87 0 0 0-1 2.26v6.19a3.12 3.12 0 0 0 1 2.22 3 3 0 0 0 2.19 1h6.26a3.12 3.12 0 0 1 2.16.95 3 3 0 0 1 1 2.22v34.29a3 3 0 0 0 1 2.19 3.15 3.15 0 0 0 2.13 1h7.74a3.09 3.09 0 0 0 2.22-1 3 3 0 0 0 1-2.09V17.93a3.31 3.31 0 0 1 3.17-3.1h6.2a3 3 0 0 0 2.22-1 3.09 3.09 0 0 0 1-2.16z" data-name="图层 1"/></g></svg>
\ No newline at end of file
#!/bin/sh
if [ ! -d /var/lib/taos ]; then
mkdir -p /var/lib/taos
fi
if [ ! -d /var/log/taos ]; then
mkdir -p -m777 /var/log/taos
fi
if [ ! -d /etc/taos ]; then
mkdir -p /etc/taos
fi
if [ ! -f /etc/taos/taos.cfg ]; then
cp $SNAP/etc/taos/taos.cfg /etc/taos/taos.cfg
fi
#!/bin/sh
# Wrapper to check for custom config in $SNAP_USER_COMMON or $SNAP_COMMON and
# use it otherwise fall back to the included basic config which will at least
# allow mosquitto to run and do something.
# This script will also copy the full example config in to SNAP_USER_COMMON or
# SNAP_COMMON so that people can refer to it.
#
# The decision about whether to use SNAP_USER_COMMON or SNAP_COMMON is taken
# based on the user that runs the command. If the user is root, it is assumed
# that mosquitto is being run as a system daemon, and SNAP_COMMON will be used.
# If a non-root user runs the command, then SNAP_USER_COMMON will be used.
case "$SNAP_USER_COMMON" in
*/root/snap/tdengine/common*) COMMON=$SNAP_COMMON ;;
*) COMMON=$SNAP_USER_COMMON ;;
esac
if [ -d /etc/taos ]; then
CONFIG_FILE="/etc/taos"
else
CONFIG_FILE="$SNAP/etc/taos"
fi
# Launch the snap
$SNAP/usr/bin/taosd -c $CONFIG_FILE $@
#!/bin/sh
# Wrapper to check for custom config in $SNAP_USER_COMMON or $SNAP_COMMON and
# use it otherwise fall back to the included basic config which will at least
# allow mosquitto to run and do something.
# This script will also copy the full example config in to SNAP_USER_COMMON or
# SNAP_COMMON so that people can refer to it.
#
# The decision about whether to use SNAP_USER_COMMON or SNAP_COMMON is taken
# based on the user that runs the command. If the user is root, it is assumed
# that mosquitto is being run as a system daemon, and SNAP_COMMON will be used.
# If a non-root user runs the command, then SNAP_USER_COMMON will be used.
case "$SNAP_USER_COMMON" in
*/root/snap/tdengine/common*) COMMON=$SNAP_COMMON ;;
*) COMMON=$SNAP_USER_COMMON ;;
esac
if [ -d /etc/taos ]; then
CONFIG_FILE="/etc/taos"
else
CONFIG_FILE="$SNAP/etc/taos"
fi
# Launch the snap
$SNAP/usr/bin/taos -c $CONFIG_FILE $@
name: tdengine
base: core18 # the base snap is the execution environment for this snap
version: '2.0.0.6' # just for humans, typically '1.2+git' or '1.3.2'
icon: snap/gui/t-dengine.svg
summary: an open-source big data platform designed and optimized for IoT.
description: |
TDengine is an open-source big data platform designed and optimized for Internet of Things (IoT), Connected Vehicles, and Industrial IoT. Besides the 10x faster time-series database, it provides caching, stream computing, message queuing and other functionalities to reduce the complexity and costs of development and operations.
grade: stable
confinement: classic
apps:
tdengine:
command: launcher.sh
daemon: simple
restart-condition: always
plugs:
- network
- network-bind
- system-observe
- systemfiles
taos:
command: taoswrapper.sh
plugs:
- network
- systemfiles
taosdemo:
command: usr/bin/taosdemo
plugs:
- network
plugs:
systemfiles:
interface: system-files
read:
- /etc/taos
- /var/lib/taos
- /tmp
write:
- /var/log/taos
- /var/lib/taos
- /tmp
parts:
script:
plugin: dump
source: snap/local/
prime:
- launcher.sh
- taoswrapper.sh
tdengine:
source: .
source-type: local
plugin: cmake
build-packages:
- gcc
- g++
- make
- cmake
override-build: |
snapcraftctl build
if [ ! -d $SNAPCRAFT_STAGE/usr ]; then
mkdir $SNAPCRAFT_STAGE/usr
fi
if [ ! -d $SNAPCRAFT_STAGE/etc/taos ]; then
mkdir -p $SNAPCRAFT_STAGE/etc/taos
fi
cp $SNAPCRAFT_PART_BUILD/build/* -rf $SNAPCRAFT_STAGE/usr/
cp $SNAPCRAFT_PART_SRC/packaging/cfg/taos.cfg -rf $SNAPCRAFT_STAGE/etc/taos/
if [ ! -d $SNAPCRAFT_STAGE/var/lib/taos ]; then
mkdir -p $SNAPCRAFT_STAGE/var/lib/taos
fi
if [ ! -d $SNAPCRAFT_STAGE/var/log/taos ]; then
mkdir -p $SNAPCRAFT_STAGE/var/log/taos
fi
prime:
- etc/taos/taos.cfg
- usr/bin/taosd
- usr/bin/taos
- usr/bin/taosdemo
- usr/lib/libtaos.so.2.0.0.6
- usr/lib/libtaos.so.1
- usr/lib/libtaos.so
override-prime: |
snapcraftctl prime
if [ ! -d $SNAPCRAFT_STAGE/var/lib/taos ]; then
cp -rf $SNAPCRAFT_STAGE/var/lib/taos $SNAPCRAFT_PRIME
fi
if [ ! -d $SNAPCRAFT_STAGE/var/log/taos ]; then
cp -rf $SNAPCRAFT_STAGE/var/log/taos $SNAPCRAFT_PRIME
fi
layout:
/var/lib/taos:
bind: $SNAP_DATA/var/lib/taos
/var/log/taos:
bind: $SNAP_DATA/var/log/taos
/etc/taos/taos.cfg:
bind-file: $SNAP_DATA/etc/taos/taos.cfg
hooks:
install:
plugs: [systemfiles]
......@@ -904,6 +904,11 @@ static int32_t tscCheckIfCreateTable(char **sqlstr, SSqlObj *pSql) {
sToken = tStrGetToken(sql, &index, true, numOfIgnoreToken, &ignoreTokenTypes);
sql += index;
if (TK_ILLEGAL == sToken.type) {
tdDestroyKVRowBuilder(&kvRowBuilder);
return TSDB_CODE_TSC_INVALID_SQL;
}
if (sToken.n == 0 || sToken.type == TK_RP) {
break;
}
......
......@@ -1158,8 +1158,9 @@ static int32_t handleArithmeticExpr(SSqlCmd* pCmd, int32_t clauseIndex, int32_t
int32_t ret = exprTreeFromSqlExpr(pCmd, &pNode, pItem->pNode, pQueryInfo->exprList, pQueryInfo, colList);
if (ret != TSDB_CODE_SUCCESS) {
tExprTreeDestroy(&pNode, NULL);
taosTFree(arithmeticExprStr);
taosArrayDestroy(colList);
tExprTreeDestroy(&pNode, NULL);
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg2);
}
......@@ -1168,6 +1169,8 @@ static int32_t handleArithmeticExpr(SSqlCmd* pCmd, int32_t clauseIndex, int32_t
SColIndex* pIndex = taosArrayGet(colList, k);
if (pIndex->flag == 1) {
taosTFree(arithmeticExprStr);
taosArrayDestroy(colList);
tExprTreeDestroy(&pNode, NULL);
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg3);
}
}
......@@ -1649,10 +1652,12 @@ int32_t addExprAndResultField(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, int32_t col
}
SColumnIndex index = COLUMN_INDEX_INITIALIZER;
if ((getColumnIndexByName(pCmd, &pParamElem->pNode->colInfo, pQueryInfo, &index) != TSDB_CODE_SUCCESS) ||
index.columnIndex == TSDB_TBNAME_COLUMN_INDEX) {
if ((getColumnIndexByName(pCmd, &pParamElem->pNode->colInfo, pQueryInfo, &index) != TSDB_CODE_SUCCESS)) {
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg3);
}
if (index.columnIndex == TSDB_TBNAME_COLUMN_INDEX) {
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg6);
}
// 2. check if sql function can be applied on this column data type
pTableMetaInfo = tscGetMetaInfo(pQueryInfo, index.tableIndex);
......@@ -1861,7 +1866,10 @@ int32_t addExprAndResultField(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, int32_t col
if (getColumnIndexByName(pCmd, &pParamElem->pNode->colInfo, pQueryInfo, &index) != TSDB_CODE_SUCCESS) {
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg3);
}
if (index.columnIndex == TSDB_TBNAME_COLUMN_INDEX) {
return invalidSqlErrMsg(tscGetErrorMsgPayload(pCmd), msg6);
}
pTableMetaInfo = tscGetMetaInfo(pQueryInfo, index.tableIndex);
SSchema* pSchema = tscGetTableSchema(pTableMetaInfo->pTableMeta);
......
......@@ -100,7 +100,7 @@ static void tscDumpEpSetFromVgroupInfo(SCMCorVgroupInfo *pVgroupInfo, SRpcEpSet
pEpSet->inUse = (inUse >= 0 && inUse < TSDB_MAX_REPLICA) ? inUse: 0;
pEpSet->numOfEps = pVgroupInfo->numOfEps;
for (int32_t i = 0; i < pVgroupInfo->numOfEps; ++i) {
strncpy(pEpSet->fqdn[i], pVgroupInfo->epAddr[i].fqdn, TSDB_FQDN_LEN);
tstrncpy(pEpSet->fqdn[i], pVgroupInfo->epAddr[i].fqdn, sizeof(pEpSet->fqdn[i]));
pEpSet->port[i] = pVgroupInfo->epAddr[i].port;
}
taosCorEndRead(&pVgroupInfo->version);
......@@ -117,7 +117,7 @@ static void tscUpdateVgroupInfo(SSqlObj *pObj, SRpcEpSet *pEpSet) {
pVgroupInfo->inUse = pEpSet->inUse;
pVgroupInfo->numOfEps = pEpSet->numOfEps;
for (int32_t i = 0; i < pVgroupInfo->numOfEps; i++) {
strncpy(pVgroupInfo->epAddr[i].fqdn, pEpSet->fqdn[i], TSDB_FQDN_LEN);
tstrncpy(pVgroupInfo->epAddr[i].fqdn, pEpSet->fqdn[i], sizeof(pEpSet->fqdn[i]));
pVgroupInfo->epAddr[i].port = pEpSet->port[i];
}
tscDebug("after: EndPoint in use: %d", pVgroupInfo->inUse);
......@@ -158,6 +158,7 @@ void tscProcessHeartBeatRsp(void *param, TAOS_RES *tres, int code) {
if (pRsp->killConnection) {
tscKillConnection(pObj);
return;
} else {
if (pRsp->queryId) tscKillQuery(pObj, htonl(pRsp->queryId));
if (pRsp->streamId) tscKillStream(pObj, htonl(pRsp->streamId));
......
......@@ -684,6 +684,8 @@ static void tidTagRetrieveCallback(void* param, TAOS_RES* tres, int32_t numOfRow
freeJoinSubqueryObj(pParentSql);
pParentSql->res.code = code;
tscQueueAsyncRes(pParentSql);
taosArrayDestroy(s1);
taosArrayDestroy(s2);
return;
}
......@@ -1296,7 +1298,9 @@ int32_t tscHandleMasterJoinQuery(SSqlObj* pSql) {
tscError("%p tableIndex:%d, failed to allocate join support object, abort further query", pSql, i);
pState->numOfRemain = i;
pSql->res.code = TSDB_CODE_TSC_OUT_OF_MEMORY;
if (0 == i) {
taosTFree(pState);
}
return pSql->res.code;
}
......@@ -1304,7 +1308,9 @@ int32_t tscHandleMasterJoinQuery(SSqlObj* pSql) {
if (code != TSDB_CODE_SUCCESS) { // failed to create subquery object, quit query
tscDestroyJoinSupporter(pSupporter);
pSql->res.code = TSDB_CODE_TSC_OUT_OF_MEMORY;
if (0 == i) {
taosTFree(pState);
}
break;
}
}
......@@ -2091,17 +2097,17 @@ void tscBuildResFromSubqueries(SSqlObj *pSql) {
// return;
// }
tscFetchDatablockFromSubquery(pSql);
if (pRes->code != TSDB_CODE_SUCCESS) {
return;
}
// tscFetchDatablockFromSubquery(pSql);
// if (pRes->code != TSDB_CODE_SUCCESS) {
// return;
// }
}
if (pSql->res.code == TSDB_CODE_SUCCESS) {
(*pSql->fp)(pSql->param, pSql, pRes->numOfRows);
} else {
tscQueueAsyncRes(pSql);
}
// if (pSql->res.code == TSDB_CODE_SUCCESS) {
// (*pSql->fp)(pSql->param, pSql, pRes->numOfRows);
// } else {
// tscQueueAsyncRes(pSql);
// }
}
static void transferNcharData(SSqlObj *pSql, int32_t columnIndex, TAOS_FIELD *pField) {
......
......@@ -5242,7 +5242,6 @@ static int32_t getColumnIndexInSource(SQueryTableMsg *pQueryMsg, SSqlFuncMsg *pE
j += 1;
}
}
assert(0);
}
......@@ -5933,6 +5932,7 @@ static SQInfo *createQInfoImpl(SQueryTableMsg *pQueryMsg, SArray* pTableIdList,
if (p1 == NULL) {
goto _cleanup;
}
taosArrayPush(pQInfo->tableqinfoGroupInfo.pGroupList, &p1);
for(int32_t j = 0; j < s; ++j) {
STableKeyInfo* info = taosArrayGet(pa, j);
......@@ -5956,8 +5956,6 @@ static SQInfo *createQInfoImpl(SQueryTableMsg *pQueryMsg, SArray* pTableIdList,
taosHashPut(pQInfo->tableqinfoGroupInfo.map, &id->tid, sizeof(id->tid), &item, POINTER_BYTES);
index += 1;
}
taosArrayPush(pQInfo->tableqinfoGroupInfo.pGroupList, &p1);
}
pQInfo->arrTableIdInfo = taosArrayInit(tableIndex, sizeof(STableIdInfo));
......
#!/bin/bash
DATA_DIR=/mnt/root/testdata
NUM_LOOP=1
NUM_LOOP=5
NUM_OF_FILES=100
rowsPerRequest=(1 100 500 1000 2000)
......@@ -13,20 +13,19 @@ function printTo {
}
function runTest {
printf "R/R, "
for c in `seq 1 $clients`; do
if [ "$c" == "1" ]; then
printf "$c client, "
else
printf "$c clients, "
fi
declare -A avgRPR
for r in ${!rowsPerRequest[@]}; do
for c in `seq 1 $clients`; do
avgRPR[$r,$c]=0
done
done
printf "\n"
for r in ${rowsPerRequest[@]}; do
printf "$r, "
for r in ${!rowsPerRequest[@]}; do
for c in `seq 1 $clients`; do
totalRPR=0
OUTPUT_FILE=tdengineTestWrite-RPR${rowsPerRequest[$r]}-clients$c.out
for i in `seq 1 $NUM_LOOP`; do
restartTaosd
$TAOSD_DIR/taos -s "drop database db" > /dev/null 2>&1
......@@ -34,18 +33,36 @@ function runTest {
-dataDir $DATA_DIR \
-numOfFiles $NUM_OF_FILES \
-w -clients $c \
-rowsPerRequest $r"
RPR=`$TDTEST_DIR/tdengineTest \
-rowsPerRequest ${rowsPerRequest[$r]}"
$TDTEST_DIR/tdengineTest \
-dataDir $DATA_DIR \
-numOfFiles $NUM_OF_FILES \
-w -clients $c \
-rowsPerRequest $r \
| grep speed | awk '{print $(NF-1)}'`
-rowsPerRequest ${rowsPerRequest[$r]} \
| tee $OUTPUT_FILE
RPR=`cat $OUTPUT_FILE | grep speed | awk '{print $(NF-1)}'`
totalRPR=`echo "scale=4; $totalRPR + $RPR" | bc`
printTo "rows:$r, clients:$c, i:$i RPR:$RPR"
printTo "rows:${rowsPerRequest[$r]}, clients:$c, i:$i RPR:$RPR"
done
avgRPR=`echo "scale=4; $totalRPR / $NUM_LOOP" | bc`
printf "$avgRPR, "
avgRPR[$r,$c]=`echo "scale=4; $totalRPR / $NUM_LOOP" | bc`
printTo "r:${rowsPerRequest[$r]} c:$c avgRPR:${avgRPR[$r,$c]}"
done
done
printf "R/R, "
for c in `seq 1 $clients`; do
if [ "$c" == "1" ]; then
printf "$c client, "
else
printf "$c clients, "
fi
done
printf "\n"
for r in ${!rowsPerRequest[@]}; do
printf "${rowsPerRequest[$r]}, "
for c in `seq 1 $clients`; do
printf "${avgRPR[$r,$c]}, "
done
printf "\n"
done
......@@ -80,10 +97,6 @@ while : ; do
verbose=true
shift ;;
-n)
NUM_LOOP=$2
shift 2;;
master)
master=true
develop=false
......@@ -98,18 +111,22 @@ while : ; do
clients=$2
shift 2;;
-n)
NUM_LOOP=$2
shift 2;;
*)
break ;;
esac
done
if $master ; then
printTo "Test master branch.."
echo "Test master branch.."
cp /mnt/root/cfg/master/taos.cfg /etc/taos/taos.cfg
WORK_DIR=/mnt/root/TDengine.master
else
printTo "Test develop branch.."
cp /mnt/root/cfg/perftest/taos.cfg /etc/taos/taos.cfg
echo "Test develop branch.."
cp /mnt/root/cfg/develop/taos.cfg /etc/taos/taos.cfg
WORK_DIR=/mnt/root/TDengine
fi
......@@ -118,4 +135,4 @@ TDTEST_DIR=$WORK_DIR/tests/comparisonTest/tdengine
runTest
printTo "Test done!"
echo "Test done!"
......@@ -25,11 +25,23 @@ class TDTestCase:
def run(self):
tdSql.prepare()
ret = tdSql.query('select server_version()')
tdSql.checkData(0, 0, "2.0.0.6")
ret = tdSql.query('select client_version()')
tdSql.checkData(0, 0, "2.0.0.6")
sql = "select server_version()"
ret = tdSql.query(sql)
version = tdSql.getData(0, 0)[0:3]
expectedVersion = "2.0"
if(version == expectedVersion):
tdLog.info("sql:%s, row:%d col:%d data:%s == expect:%s" % (sql, 0, 0, version, expectedVersion))
else:
tdLog.exit("sql:%s, row:%d col:%d data:%s != expect:%s" % (sql, 0, 0, version, expectedVersion))
sql = "select client_version()"
ret = tdSql.query(sql)
version = tdSql.getData(0, 0)[0:3]
expectedVersion = "2.0"
if(version == expectedVersion):
tdLog.info("sql:%s, row:%d col:%d data:%s == expect:%s" % (sql, 0, 0, version, expectedVersion))
else:
tdLog.exit("sql:%s, row:%d col:%d data:%s != expect:%s" % (sql, 0, 0, version, expectedVersion))
def stop(self):
......
......@@ -49,11 +49,7 @@ class TDTestCase:
tdSql.query("select col1 + col2 from test1")
tdSql.checkRows(10)
tdSql.checkData(0, 0, 2.0)
tdSql.query("select col1 + col2 * col3 from test1")
tdSql.checkRows(10)
tdSql.checkData(1, 0, 6.0)
tdSql.checkData(0, 0, 2.0)
tdSql.query("select col1 + col2 * col3 + col3 / col4 + col5 + col6 from test1")
tdSql.checkRows(10)
......
......@@ -36,7 +36,8 @@ class TDTestCase:
"insert into tb2 using stb1 tags(2,'tb2', '表2') values ('2020-04-18 15:00:02.000', 3, 2.1), ('2020-04-18 15:00:03.000', 4, 2.2)")
# inner join --- bug
tdSql.error("select * from tb1 a, tb2 b where a.ts = b.ts")
tdSql.query("select * from tb1 a, tb2 b where a.ts = b.ts")
tdSql.checkRows(0)
# join 3 tables -- bug exists
tdSql.error("select stb_t.ts, stb_t.dscrption, stb_t.temperature, stb_p.id, stb_p.dscrption, stb_p.pressure,stb_v.velocity from stb_p, stb_t, stb_v where stb_p.ts=stb_t.ts and stb_p.ts=stb_v.ts and stb_p.id = stb_t.id")
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册