Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Tonvia
TDengine
提交
636c66bd
T
TDengine
项目概览
Tonvia
/
TDengine
与 Fork 源项目一致
Fork自
taosdata / TDengine
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
636c66bd
编写于
1月 15, 2021
作者:
D
dapan1121
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'develop' into hotfix/TD-2719
上级
4527694b
abf394ae
变更
11
隐藏空白更改
内联
并排
Showing
11 changed file
with
158 addition
and
34 deletion
+158
-34
documentation20/webdocs/markdowndocs/TAOS SQL-ch.md
documentation20/webdocs/markdowndocs/TAOS SQL-ch.md
+112
-7
documentation20/webdocs/markdowndocs/administrator-ch.md
documentation20/webdocs/markdowndocs/administrator-ch.md
+8
-5
documentation20/webdocs/markdowndocs/cluster.md
documentation20/webdocs/markdowndocs/cluster.md
+5
-1
documentation20/webdocs/markdowndocs/connector-ch.md
documentation20/webdocs/markdowndocs/connector-ch.md
+12
-12
packaging/cfg/taos.cfg
packaging/cfg/taos.cfg
+2
-2
src/client/src/tscSQLParser.c
src/client/src/tscSQLParser.c
+3
-0
src/common/src/tvariant.c
src/common/src/tvariant.c
+1
-0
src/inc/taosdef.h
src/inc/taosdef.h
+1
-1
src/query/src/qExecutor.c
src/query/src/qExecutor.c
+8
-3
src/sync/src/syncRetrieve.c
src/sync/src/syncRetrieve.c
+5
-2
src/vnode/src/vnodeWrite.c
src/vnode/src/vnodeWrite.c
+1
-1
未找到文件。
documentation20/webdocs/markdowndocs/TAOS SQL-ch.md
浏览文件 @
636c66bd
...
@@ -68,7 +68,9 @@ TDengine缺省的时间戳是毫秒精度,但通过修改配置参数enableMic
...
@@ -68,7 +68,9 @@ TDengine缺省的时间戳是毫秒精度,但通过修改配置参数enableMic
2) UPDATE 标志数据库支持更新相同时间戳数据;
2) UPDATE 标志数据库支持更新相同时间戳数据;
3) 数据库名最大长度为33;
3) 数据库名最大长度为33;
4) 一条SQL 语句的最大长度为65480个字符;
4) 一条SQL 语句的最大长度为65480个字符;
5) 数据库还有更多与存储相关的配置参数,请参见系统管理。
5) 数据库还有更多与存储相关的配置参数,请参见系统管理。
-
**显示系统当前参数**
-
**显示系统当前参数**
...
@@ -130,10 +132,15 @@ TDengine缺省的时间戳是毫秒精度,但通过修改配置参数enableMic
...
@@ -130,10 +132,15 @@ TDengine缺省的时间戳是毫秒精度,但通过修改配置参数enableMic
CREATE TABLE [IF NOT EXISTS] tb_name (timestamp_field_name TIMESTAMP, field1_name data_type1 [, field2_name data_type2 ...]);
CREATE TABLE [IF NOT EXISTS] tb_name (timestamp_field_name TIMESTAMP, field1_name data_type1 [, field2_name data_type2 ...]);
```
```
说明:
说明:
1) 表的第一个字段必须是TIMESTAMP,并且系统自动将其设为主键;
1) 表的第一个字段必须是TIMESTAMP,并且系统自动将其设为主键;
2) 表名最大长度为192;
2) 表名最大长度为192;
3) 表的每行长度不能超过16k个字符;
3) 表的每行长度不能超过16k个字符;
4) 子表名只能由字母、数字和下划线组成,且不能以数字开头
4) 子表名只能由字母、数字和下划线组成,且不能以数字开头
5) 使用数据类型binary或nchar,需指定其最长的字节数,如binary(20),表示20字节;
5) 使用数据类型binary或nchar,需指定其最长的字节数,如binary(20),表示20字节;
-
**以超级表为模板创建数据表**
-
**以超级表为模板创建数据表**
...
@@ -149,7 +156,12 @@ TDengine缺省的时间戳是毫秒精度,但通过修改配置参数enableMic
...
@@ -149,7 +156,12 @@ TDengine缺省的时间戳是毫秒精度,但通过修改配置参数enableMic
CREATE TABLE [IF NOT EXISTS] tb_name1 USING stb_name TAGS (tag_value1, ...) tb_name2 USING stb_name TAGS (tag_value2, ...) ...;
CREATE TABLE [IF NOT EXISTS] tb_name1 USING stb_name TAGS (tag_value1, ...) tb_name2 USING stb_name TAGS (tag_value2, ...) ...;
```
```
以更快的速度批量创建大量数据表。(服务器端 2.0.14 及以上版本)
以更快的速度批量创建大量数据表。(服务器端 2.0.14 及以上版本)
说明:批量建表方式要求数据表必须以超级表为模板。
说明:
1)批量建表方式要求数据表必须以超级表为模板。
2)在不超出 SQL 语句长度限制的前提下,单条语句中的建表数量建议控制在 1000~3000 之间,将会获得比较理想的建表速度。
-
**删除数据表**
-
**删除数据表**
...
@@ -164,7 +176,9 @@ TDengine缺省的时间戳是毫秒精度,但通过修改配置参数enableMic
...
@@ -164,7 +176,9 @@ TDengine缺省的时间戳是毫秒精度,但通过修改配置参数enableMic
```
```
显示当前数据库下的所有数据表信息。
显示当前数据库下的所有数据表信息。
说明:可在like中使用通配符进行名称的匹配,这一通配符字符串最长不能超过24字节。
说明:可在like中使用通配符进行名称的匹配,这一通配符字符串最长不能超过24字节。
通配符匹配:1)’%’ (百分号)匹配0到任意个字符;2)’\_’下划线匹配一个字符。
通配符匹配:1)’%’ (百分号)匹配0到任意个字符;2)’\_’下划线匹配一个字符。
-
**在线修改显示字符宽度**
-
**在线修改显示字符宽度**
...
@@ -185,7 +199,9 @@ TDengine缺省的时间戳是毫秒精度,但通过修改配置参数enableMic
...
@@ -185,7 +199,9 @@ TDengine缺省的时间戳是毫秒精度,但通过修改配置参数enableMic
ALTER TABLE tb_name ADD COLUMN field_name data_type;
ALTER TABLE tb_name ADD COLUMN field_name data_type;
```
```
说明:
说明:
1) 列的最大个数为1024,最小个数为2;
1) 列的最大个数为1024,最小个数为2;
2) 列名最大长度为64;
2) 列名最大长度为64;
-
**表删除列**
-
**表删除列**
...
@@ -204,9 +220,13 @@ TDengine缺省的时间戳是毫秒精度,但通过修改配置参数enableMic
...
@@ -204,9 +220,13 @@ TDengine缺省的时间戳是毫秒精度,但通过修改配置参数enableMic
创建STable, 与创建表的SQL语法相似,但需指定TAGS字段的名称和类型
创建STable, 与创建表的SQL语法相似,但需指定TAGS字段的名称和类型
说明:
说明:
1) TAGS 列的数据类型不能是timestamp类型;
1) TAGS 列的数据类型不能是timestamp类型;
2) TAGS 列名不能与其他列名相同;
2) TAGS 列名不能与其他列名相同;
3) TAGS 列名不能为预留关键字;
3) TAGS 列名不能为预留关键字;
4) TAGS 最多允许128个,至少1个,总长度不超过16k个字符。
4) TAGS 最多允许128个,至少1个,总长度不超过16k个字符。
-
**删除超级表**
-
**删除超级表**
...
@@ -333,7 +353,9 @@ SELECT select_expr [, select_expr ...]
...
@@ -333,7 +353,9 @@ SELECT select_expr [, select_expr ...]
[LIMIT limit_val [, OFFSET offset_val]]
[LIMIT limit_val [, OFFSET offset_val]]
[>> export_file]
[>> export_file]
```
```
说明:针对 insert 类型的 SQL 语句,我们采用的流式解析策略,在发现后面的错误之前,前面正确的部分SQL仍会执行。下面的sql中,insert语句是无效的,但是d1001仍会被创建。
说明:针对 insert 类型的 SQL 语句,我们采用的流式解析策略,在发现后面的错误之前,前面正确的部分SQL仍会执行。下面的sql中,insert语句是无效的,但是d1001仍会被创建。
```
mysql
```
mysql
taos> CREATE TABLE meters(ts TIMESTAMP, current FLOAT, voltage INT, phase FLOAT) TAGS(location BINARY(30), groupId INT);
taos> CREATE TABLE meters(ts TIMESTAMP, current FLOAT, voltage INT, phase FLOAT) TAGS(location BINARY(30), groupId INT);
Query OK, 0 row(s) affected (0.008245s)
Query OK, 0 row(s) affected (0.008245s)
...
@@ -614,10 +636,20 @@ TDengine支持针对数据的聚合查询。提供支持的聚合和选择函数
...
@@ -614,10 +636,20 @@ TDengine支持针对数据的聚合查询。提供支持的聚合和选择函数
SELECT COUNT([*|field_name]) FROM tb_name [WHERE clause];
SELECT COUNT([*|field_name]) FROM tb_name [WHERE clause];
```
```
功能说明:统计表/超级表中记录行数或某列的非空值个数。
功能说明:统计表/超级表中记录行数或某列的非空值个数。
返回结果数据类型:长整型INT64。
返回结果数据类型:长整型INT64。
应用字段:应用全部字段。
应用字段:应用全部字段。
适用于:表、超级表。
适用于:表、超级表。
说明:1)可以使用星号*来替代具体的字段,使用星号(*)返回全部记录数量。2)针对同一表的(不包含NULL值)字段查询结果均相同。3)如果统计对象是具体的列,则返回该列中非NULL值的记录数量。
说明:
1)可以使用星号*来替代具体的字段,使用星号(*)返回全部记录数量。
2)针对同一表的(不包含NULL值)字段查询结果均相同。
3)如果统计对象是具体的列,则返回该列中非NULL值的记录数量。
示例:
示例:
```mysql
```mysql
...
@@ -639,8 +671,11 @@ TDengine支持针对数据的聚合查询。提供支持的聚合和选择函数
...
@@ -639,8 +671,11 @@ TDengine支持针对数据的聚合查询。提供支持的聚合和选择函数
SELECT AVG(field_name) FROM tb_name [WHERE clause];
SELECT AVG(field_name) FROM tb_name [WHERE clause];
```
```
功能说明:统计表/超级表中某列的平均值。
功能说明:统计表/超级表中某列的平均值。
返回结果数据类型:双精度浮点数Double。
返回结果数据类型:双精度浮点数Double。
应用字段:不能应用在timestamp、binary、nchar、bool字段。
应用字段:不能应用在timestamp、binary、nchar、bool字段。
适用于:表、超级表。
适用于:表、超级表。
示例:
示例:
...
@@ -663,8 +698,11 @@ TDengine支持针对数据的聚合查询。提供支持的聚合和选择函数
...
@@ -663,8 +698,11 @@ TDengine支持针对数据的聚合查询。提供支持的聚合和选择函数
SELECT TWA(field_name) FROM tb_name WHERE clause;
SELECT TWA(field_name) FROM tb_name WHERE clause;
```
```
功能说明:时间加权平均函数。统计表/超级表中某列在一段时间内的时间加权平均。
功能说明:时间加权平均函数。统计表/超级表中某列在一段时间内的时间加权平均。
返回结果数据类型:双精度浮点数Double。
返回结果数据类型:双精度浮点数Double。
应用字段:不能应用在timestamp、binary、nchar、bool类型字段。
应用字段:不能应用在timestamp、binary、nchar、bool类型字段。
适用于:表、超级表。
适用于:表、超级表。
- **SUM**
- **SUM**
...
@@ -672,8 +710,11 @@ TDengine支持针对数据的聚合查询。提供支持的聚合和选择函数
...
@@ -672,8 +710,11 @@ TDengine支持针对数据的聚合查询。提供支持的聚合和选择函数
SELECT SUM(field_name) FROM tb_name [WHERE clause];
SELECT SUM(field_name) FROM tb_name [WHERE clause];
```
```
功能说明:统计表/超级表中某列的和。
功能说明:统计表/超级表中某列的和。
返回结果数据类型:双精度浮点数Double和长整型INT64。
返回结果数据类型:双精度浮点数Double和长整型INT64。
应用字段:不能应用在timestamp、binary、nchar、bool类型字段。
应用字段:不能应用在timestamp、binary、nchar、bool类型字段。
适用于:表、超级表。
适用于:表、超级表。
示例:
示例:
...
@@ -696,8 +737,11 @@ TDengine支持针对数据的聚合查询。提供支持的聚合和选择函数
...
@@ -696,8 +737,11 @@ TDengine支持针对数据的聚合查询。提供支持的聚合和选择函数
SELECT STDDEV(field_name) FROM tb_name [WHERE clause];
SELECT STDDEV(field_name) FROM tb_name [WHERE clause];
```
```
功能说明:统计表中某列的均方差。
功能说明:统计表中某列的均方差。
返回结果数据类型:双精度浮点数Double。
返回结果数据类型:双精度浮点数Double。
应用字段:不能应用在timestamp、binary、nchar、bool类型字段。
应用字段:不能应用在timestamp、binary、nchar、bool类型字段。
适用于:表。
适用于:表。
示例:
示例:
...
@@ -714,9 +758,13 @@ TDengine支持针对数据的聚合查询。提供支持的聚合和选择函数
...
@@ -714,9 +758,13 @@ TDengine支持针对数据的聚合查询。提供支持的聚合和选择函数
SELECT LEASTSQUARES(field_name, start_val, step_val) FROM tb_name [WHERE clause];
SELECT LEASTSQUARES(field_name, start_val, step_val) FROM tb_name [WHERE clause];
```
```
功能说明:统计表中某列的值是主键(时间戳)的拟合直线方程。start_val是自变量初始值,step_val是自变量的步长值。
功能说明:统计表中某列的值是主键(时间戳)的拟合直线方程。start_val是自变量初始值,step_val是自变量的步长值。
返回结果数据类型:字符串表达式(斜率, 截距)。
返回结果数据类型:字符串表达式(斜率, 截距)。
应用字段:不能应用在timestamp、binary、nchar、bool类型字段。
应用字段:不能应用在timestamp、binary、nchar、bool类型字段。
说明:自变量是时间戳,因变量是该列的值。
说明:自变量是时间戳,因变量是该列的值。
适用于:表。
适用于:表。
示例:
示例:
...
@@ -735,7 +783,9 @@ TDengine支持针对数据的聚合查询。提供支持的聚合和选择函数
...
@@ -735,7 +783,9 @@ TDengine支持针对数据的聚合查询。提供支持的聚合和选择函数
SELECT MIN(field_name) FROM {tb_name | stb_name} [WHERE clause];
SELECT MIN(field_name) FROM {tb_name | stb_name} [WHERE clause];
```
```
功能说明:统计表/超级表中某列的值最小值。
功能说明:统计表/超级表中某列的值最小值。
返回结果数据类型:同应用的字段。
返回结果数据类型:同应用的字段。
应用字段:不能应用在timestamp、binary、nchar、bool类型字段。
应用字段:不能应用在timestamp、binary、nchar、bool类型字段。
示例:
示例:
...
@@ -758,7 +808,9 @@ TDengine支持针对数据的聚合查询。提供支持的聚合和选择函数
...
@@ -758,7 +808,9 @@ TDengine支持针对数据的聚合查询。提供支持的聚合和选择函数
SELECT MAX(field_name) FROM { tb_name | stb_name } [WHERE clause];
SELECT MAX(field_name) FROM { tb_name | stb_name } [WHERE clause];
```
```
功能说明:统计表/超级表中某列的值最大值。
功能说明:统计表/超级表中某列的值最大值。
返回结果数据类型:同应用的字段。
返回结果数据类型:同应用的字段。
应用字段:不能应用在timestamp、binary、nchar、bool类型字段。
应用字段:不能应用在timestamp、binary、nchar、bool类型字段。
示例:
示例:
...
@@ -781,9 +833,18 @@ TDengine支持针对数据的聚合查询。提供支持的聚合和选择函数
...
@@ -781,9 +833,18 @@ TDengine支持针对数据的聚合查询。提供支持的聚合和选择函数
SELECT FIRST(field_name) FROM { tb_name | stb_name } [WHERE clause];
SELECT FIRST(field_name) FROM { tb_name | stb_name } [WHERE clause];
```
```
功能说明:统计表/超级表中某列的值最先写入的非NULL值。
功能说明:统计表/超级表中某列的值最先写入的非NULL值。
返回结果数据类型:同应用的字段。
返回结果数据类型:同应用的字段。
应用字段:所有字段。
应用字段:所有字段。
说明:1)如果要返回各个列的首个(时间戳最小)非NULL值,可以使用FIRST(\*);2) 如果结果集中的某列全部为NULL值,则该列的返回结果也是NULL;3) 如果结果集中所有列全部为NULL值,则不返回结果。
说明:
1)如果要返回各个列的首个(时间戳最小)非NULL值,可以使用FIRST(\*);
2) 如果结果集中的某列全部为NULL值,则该列的返回结果也是NULL;
3) 如果结果集中所有列全部为NULL值,则不返回结果。
示例:
示例:
```mysql
```mysql
...
@@ -805,9 +866,16 @@ TDengine支持针对数据的聚合查询。提供支持的聚合和选择函数
...
@@ -805,9 +866,16 @@ TDengine支持针对数据的聚合查询。提供支持的聚合和选择函数
SELECT LAST(field_name) FROM { tb_name | stb_name } [WHERE clause];
SELECT LAST(field_name) FROM { tb_name | stb_name } [WHERE clause];
```
```
功能说明:统计表/超级表中某列的值最后写入的非NULL值。
功能说明:统计表/超级表中某列的值最后写入的非NULL值。
返回结果数据类型:同应用的字段。
返回结果数据类型:同应用的字段。
应用字段:所有字段。
应用字段:所有字段。
说明:1)如果要返回各个列的最后(时间戳最大)一个非NULL值,可以使用LAST(\*);2)如果结果集中的某列全部为NULL值,则该列的返回结果也是NULL;如果结果集中所有列全部为NULL值,则不返回结果。
说明:
1)如果要返回各个列的最后(时间戳最大)一个非NULL值,可以使用LAST(\*);
2)如果结果集中的某列全部为NULL值,则该列的返回结果也是NULL;如果结果集中所有列全部为NULL值,则不返回结果。
示例:
示例:
```mysql
```mysql
...
@@ -829,9 +897,16 @@ TDengine支持针对数据的聚合查询。提供支持的聚合和选择函数
...
@@ -829,9 +897,16 @@ TDengine支持针对数据的聚合查询。提供支持的聚合和选择函数
SELECT TOP(field_name, K) FROM { tb_name | stb_name } [WHERE clause];
SELECT TOP(field_name, K) FROM { tb_name | stb_name } [WHERE clause];
```
```
功能说明: 统计表/超级表中某列的值最大*k*个非NULL值。若多于k个列值并列最大,则返回时间戳小的。
功能说明: 统计表/超级表中某列的值最大*k*个非NULL值。若多于k个列值并列最大,则返回时间戳小的。
返回结果数据类型:同应用的字段。
返回结果数据类型:同应用的字段。
应用字段:不能应用在timestamp、binary、nchar、bool类型字段。
应用字段:不能应用在timestamp、binary、nchar、bool类型字段。
说明:1)*k*值取值范围1≤*k*≤100;2)系统同时返回该记录关联的时间戳列。
说明:
1)*k*值取值范围1≤*k*≤100;
2)系统同时返回该记录关联的时间戳列。
示例:
示例:
```mysql
```mysql
...
@@ -856,9 +931,16 @@ TDengine支持针对数据的聚合查询。提供支持的聚合和选择函数
...
@@ -856,9 +931,16 @@ TDengine支持针对数据的聚合查询。提供支持的聚合和选择函数
SELECT BOTTOM(field_name, K) FROM { tb_name | stb_name } [WHERE clause];
SELECT BOTTOM(field_name, K) FROM { tb_name | stb_name } [WHERE clause];
```
```
功能说明:统计表/超级表中某列的值最小*k*个非NULL值。若多于k个列值并列最小,则返回时间戳小的。
功能说明:统计表/超级表中某列的值最小*k*个非NULL值。若多于k个列值并列最小,则返回时间戳小的。
返回结果数据类型:同应用的字段。
返回结果数据类型:同应用的字段。
应用字段:不能应用在timestamp、binary、nchar、bool类型字段。
应用字段:不能应用在timestamp、binary、nchar、bool类型字段。
说明:1)*k*值取值范围1≤*k*≤100;2)系统同时返回该记录关联的时间戳列。
说明:
1)*k*值取值范围1≤*k*≤100;
2)系统同时返回该记录关联的时间戳列。
示例:
示例:
```mysql
```mysql
...
@@ -882,8 +964,11 @@ TDengine支持针对数据的聚合查询。提供支持的聚合和选择函数
...
@@ -882,8 +964,11 @@ TDengine支持针对数据的聚合查询。提供支持的聚合和选择函数
SELECT PERCENTILE(field_name, P) FROM { tb_name } [WHERE clause];
SELECT PERCENTILE(field_name, P) FROM { tb_name } [WHERE clause];
```
```
功能说明:统计表中某列的值百分比分位数。
功能说明:统计表中某列的值百分比分位数。
返回结果数据类型: 双精度浮点数Double。
返回结果数据类型: 双精度浮点数Double。
应用字段:不能应用在timestamp、binary、nchar、bool类型字段。
应用字段:不能应用在timestamp、binary、nchar、bool类型字段。
说明:*P*值取值范围0≤*P*≤100,为0的时候等同于MIN,为100的时候等同于MAX。
说明:*P*值取值范围0≤*P*≤100,为0的时候等同于MIN,为100的时候等同于MAX。
示例:
示例:
...
@@ -900,9 +985,13 @@ TDengine支持针对数据的聚合查询。提供支持的聚合和选择函数
...
@@ -900,9 +985,13 @@ TDengine支持针对数据的聚合查询。提供支持的聚合和选择函数
SELECT APERCENTILE(field_name, P) FROM { tb_name | stb_name } [WHERE clause];
SELECT APERCENTILE(field_name, P) FROM { tb_name | stb_name } [WHERE clause];
```
```
功能说明:统计表中某列的值百分比分位数,与PERCENTILE函数相似,但是返回近似结果。
功能说明:统计表中某列的值百分比分位数,与PERCENTILE函数相似,但是返回近似结果。
返回结果数据类型: 双精度浮点数Double。
返回结果数据类型: 双精度浮点数Double。
应用字段:不能应用在timestamp、binary、nchar、bool类型字段。
应用字段:不能应用在timestamp、binary、nchar、bool类型字段。
说明:*P*值取值范围0≤*P*≤100,为0的时候等同于MIN,为100的时候等同于MAX。推荐使用```APERCENTILE```函数,该函数性能远胜于```PERCENTILE```函数
说明:*P*值取值范围0≤*P*≤100,为0的时候等同于MIN,为100的时候等同于MAX。推荐使用```APERCENTILE```函数,该函数性能远胜于```PERCENTILE```函数
```mysql
```mysql
taos> SELECT APERCENTILE(current, 20) FROM d1001;
taos> SELECT APERCENTILE(current, 20) FROM d1001;
apercentile(current, 20) |
apercentile(current, 20) |
...
@@ -916,8 +1005,11 @@ TDengine支持针对数据的聚合查询。提供支持的聚合和选择函数
...
@@ -916,8 +1005,11 @@ TDengine支持针对数据的聚合查询。提供支持的聚合和选择函数
SELECT LAST_ROW(field_name) FROM { tb_name | stb_name };
SELECT LAST_ROW(field_name) FROM { tb_name | stb_name };
```
```
功能说明:返回表(超级表)的最后一条记录。
功能说明:返回表(超级表)的最后一条记录。
返回结果数据类型:同应用的字段。
返回结果数据类型:同应用的字段。
应用字段:所有字段。
应用字段:所有字段。
说明:与last函数不同,last_row不支持时间范围限制,强制返回最后一条记录。
说明:与last函数不同,last_row不支持时间范围限制,强制返回最后一条记录。
示例:
示例:
...
@@ -941,8 +1033,11 @@ TDengine支持针对数据的聚合查询。提供支持的聚合和选择函数
...
@@ -941,8 +1033,11 @@ TDengine支持针对数据的聚合查询。提供支持的聚合和选择函数
SELECT DIFF(field_name) FROM tb_name [WHERE clause];
SELECT DIFF(field_name) FROM tb_name [WHERE clause];
```
```
功能说明:统计表中某列的值与前一行对应值的差。
功能说明:统计表中某列的值与前一行对应值的差。
返回结果数据类型: 同应用字段。
返回结果数据类型: 同应用字段。
应用字段:不能应用在timestamp、binary、nchar、bool类型字段。
应用字段:不能应用在timestamp、binary、nchar、bool类型字段。
说明:输出结果行数是范围内总行数减一,第一行没有结果输出。
说明:输出结果行数是范围内总行数减一,第一行没有结果输出。
示例:
示例:
...
@@ -960,8 +1055,11 @@ TDengine支持针对数据的聚合查询。提供支持的聚合和选择函数
...
@@ -960,8 +1055,11 @@ TDengine支持针对数据的聚合查询。提供支持的聚合和选择函数
SELECT SPREAD(field_name) FROM { tb_name | stb_name } [WHERE clause];
SELECT SPREAD(field_name) FROM { tb_name | stb_name } [WHERE clause];
```
```
功能说明:统计表/超级表中某列的最大值和最小值之差。
功能说明:统计表/超级表中某列的最大值和最小值之差。
返回结果数据类型: 双精度浮点数。
返回结果数据类型: 双精度浮点数。
应用字段:不能应用在binary、nchar、bool类型字段。
应用字段:不能应用在binary、nchar、bool类型字段。
说明:可用于TIMESTAMP字段,此时表示记录的时间覆盖范围。
说明:可用于TIMESTAMP字段,此时表示记录的时间覆盖范围。
示例:
示例:
...
@@ -985,9 +1083,16 @@ TDengine支持针对数据的聚合查询。提供支持的聚合和选择函数
...
@@ -985,9 +1083,16 @@ TDengine支持针对数据的聚合查询。提供支持的聚合和选择函数
SELECT field_name [+|-|*|/|%][Value|field_name] FROM { tb_name | stb_name } [WHERE clause];
SELECT field_name [+|-|*|/|%][Value|field_name] FROM { tb_name | stb_name } [WHERE clause];
```
```
功能说明:统计表/超级表中某列或多列间的值加、减、乘、除、取余计算结果。
功能说明:统计表/超级表中某列或多列间的值加、减、乘、除、取余计算结果。
返回结果数据类型:双精度浮点数。
返回结果数据类型:双精度浮点数。
应用字段:不能应用在timestamp、binary、nchar、bool类型字段。
应用字段:不能应用在timestamp、binary、nchar、bool类型字段。
说明:1)支持两列或多列之间进行计算,可使用括号控制计算优先级;2)NULL字段不参与计算,如果参与计算的某行中包含NULL,该行的计算结果为NULL。
说明:
1)支持两列或多列之间进行计算,可使用括号控制计算优先级;
2)NULL字段不参与计算,如果参与计算的某行中包含NULL,该行的计算结果为NULL。
```mysql
```mysql
taos> SELECT current + voltage * phase FROM d1001;
taos> SELECT current + voltage * phase FROM d1001;
...
...
documentation20/webdocs/markdowndocs/administrator-ch.md
浏览文件 @
636c66bd
...
@@ -255,7 +255,7 @@ taos -C 或 taos --dump-config
...
@@ -255,7 +255,7 @@ taos -C 或 taos --dump-config
CREATE
USER
<
user_name
>
PASS
<
'password'
>
;
CREATE
USER
<
user_name
>
PASS
<
'password'
>
;
```
```
创建用户,并指定用户名和密码,密码需要用单引号引起来
,
单引号为英文半角
创建用户,并指定用户名和密码,密码需要用单引号引起来
,
单引号为英文半角
```
sql
```
sql
DROP
USER
<
user_name
>
;
DROP
USER
<
user_name
>
;
...
@@ -267,13 +267,15 @@ DROP USER <user_name>;
...
@@ -267,13 +267,15 @@ DROP USER <user_name>;
ALTER
USER
<
user_name
>
PASS
<
'password'
>
;
ALTER
USER
<
user_name
>
PASS
<
'password'
>
;
```
```
修改用户密码
, 为避免被转换为小写,密码需要用单引号引用,
单引号为英文半角
修改用户密码
,为避免被转换为小写,密码需要用单引号引用,
单引号为英文半角
```
sql
```
sql
ALTER
USER
<
user_name
>
PRIVILEGE
<
super
|
write
|
read
>
;
ALTER
USER
<
user_name
>
PRIVILEGE
<
write
|
read
>
;
```
```
修改用户权限为:super/write/read,不需要添加单引号
修改用户权限为:write 或 read,不需要添加单引号
说明:系统内共有 super/write/read 三种权限级别,但目前不允许通过 alter 指令把 super 权限赋予用户。
```
mysql
```
mysql
SHOW USERS;
SHOW USERS;
...
@@ -432,11 +434,12 @@ TDengine的所有可执行文件默认存放在 _/usr/local/taos/bin_ 目录下
...
@@ -432,11 +434,12 @@ TDengine的所有可执行文件默认存放在 _/usr/local/taos/bin_ 目录下
-
数据库名:不能包含“.”以及特殊字符,不能超过32个字符
-
数据库名:不能包含“.”以及特殊字符,不能超过32个字符
-
表名:不能包含“.”以及特殊字符,与所属数据库名一起,不能超过192个字符
-
表名:不能包含“.”以及特殊字符,与所属数据库名一起,不能超过192个字符
-
表的列名:不能包含特殊字符,不能超过64个字符
-
表的列名:不能包含特殊字符,不能超过64个字符
-
数据库名、表名、列名,都不能以数字开头
-
表的列数:不能超过1024列
-
表的列数:不能超过1024列
-
记录的最大长度:包括时间戳8 byte,不能超过16KB
-
记录的最大长度:包括时间戳8 byte,不能超过16KB
-
单条SQL语句默认最大字符串长度:65480 byte
-
单条SQL语句默认最大字符串长度:65480 byte
-
数据库副本数:不能超过3
-
数据库副本数:不能超过3
-
用户名:不能超过2
0
个byte
-
用户名:不能超过2
3
个byte
-
用户密码:不能超过15个byte
-
用户密码:不能超过15个byte
-
标签(Tags)数量:不能超过128个
-
标签(Tags)数量:不能超过128个
-
标签的总长度:不能超过16Kbyte
-
标签的总长度:不能超过16Kbyte
...
...
documentation20/webdocs/markdowndocs/cluster.md
浏览文件 @
636c66bd
...
@@ -89,6 +89,8 @@ SHOW DNODES;
...
@@ -89,6 +89,8 @@ SHOW DNODES;
```
```
它将列出集群中所有的dnode,每个dnode的fqdn:port, 状态(ready, offline等),vnode数目,还未使用的vnode数目等信息。在添加或删除一个节点后,可以使用该命令查看。
它将列出集群中所有的dnode,每个dnode的fqdn:port, 状态(ready, offline等),vnode数目,还未使用的vnode数目等信息。在添加或删除一个节点后,可以使用该命令查看。
如果集群配置了Arbitrator,那么它也会在这个节点列表中显示出来,其role列的值会是“arb”。
###查看虚拟节点组
###查看虚拟节点组
为充分利用多核技术,并提供scalability,数据需要分片处理。因此TDengine会将一个DB的数据切分成多份,存放在多个vnode里。这些vnode可能分布在多个dnode里,这样就实现了水平扩展。一个vnode仅仅属于一个DB,但一个DB可以有多个vnode。vnode的是mnode根据当前系统资源的情况,自动进行分配的,无需任何人工干预。
为充分利用多核技术,并提供scalability,数据需要分片处理。因此TDengine会将一个DB的数据切分成多份,存放在多个vnode里。这些vnode可能分布在多个dnode里,这样就实现了水平扩展。一个vnode仅仅属于一个DB,但一个DB可以有多个vnode。vnode的是mnode根据当前系统资源的情况,自动进行分配的,无需任何人工干预。
...
@@ -139,4 +141,6 @@ SHOW MNODES;
...
@@ -139,4 +141,6 @@ SHOW MNODES;
如果副本数为偶数,当一个vnode group里一半vnode不工作时,是无法从中选出master的。同理,一半mnode不工作时,是无法选出mnode的master的,因为存在“split brain”问题。为解决这个问题,TDengine引入了arbitrator的概念。Arbitrator模拟一个vnode或mnode在工作,但只简单的负责网络连接,不处理任何数据插入或访问。只要包含arbitrator在内,超过半数的vnode或mnode工作,那么该vnode group或mnode组就可以正常的提供数据插入或查询服务。比如对于副本数为2的情形,如果一个节点A离线,但另外一个节点B正常,而且能连接到arbitrator, 那么节点B就能正常工作。
如果副本数为偶数,当一个vnode group里一半vnode不工作时,是无法从中选出master的。同理,一半mnode不工作时,是无法选出mnode的master的,因为存在“split brain”问题。为解决这个问题,TDengine引入了arbitrator的概念。Arbitrator模拟一个vnode或mnode在工作,但只简单的负责网络连接,不处理任何数据插入或访问。只要包含arbitrator在内,超过半数的vnode或mnode工作,那么该vnode group或mnode组就可以正常的提供数据插入或查询服务。比如对于副本数为2的情形,如果一个节点A离线,但另外一个节点B正常,而且能连接到arbitrator, 那么节点B就能正常工作。
TDengine安装包里带有一个执行程序tarbitrator, 找任何一台Linux服务器运行它即可。该程序对系统资源几乎没有要求,只需要保证有网络连接即可。该应用的命令行参数
`-p`
可以指定其对外服务的端口号,缺省是6030。配置每个taosd实例时,可以在配置文件taos.cfg里将参数arbitrator设置为arbitrator的End Point。如果该参数配置了,当副本数为偶数数,系统将自动连接配置的arbitrator。
TDengine安装包里带有一个执行程序tarbitrator, 找任何一台Linux服务器运行它即可。该程序对系统资源几乎没有要求,只需要保证有网络连接即可。该应用的命令行参数
`-p`
可以指定其对外服务的端口号,缺省是6030。配置每个taosd实例时,可以在配置文件taos.cfg里将参数arbitrator设置为Arbitrator的End Point。如果该参数配置了,当副本数为偶数数,系统将自动连接配置的Arbitrator。
在配置了Arbitrator的情况下,它也会显示在“show dnodes;”指令给出的节点列表中。
documentation20/webdocs/markdowndocs/connector-ch.md
浏览文件 @
636c66bd
...
@@ -252,7 +252,7 @@ C/C++的API类似于MySQL的C API。应用程序使用时,需要包含TDengine
...
@@ -252,7 +252,7 @@ C/C++的API类似于MySQL的C API。应用程序使用时,需要包含TDengine
-
`void taos_free_result(TAOS_RES *res)`
-
`void taos_free_result(TAOS_RES *res)`
释放查询结果集以及相关的资源。查询完成后,务必调用该API释放资源,否则可能导致应用内存泄露。
释放查询结果集以及相关的资源。查询完成后,务必调用该API释放资源,否则可能导致应用内存泄露。
但也需注意,释放资源后,如果再调用
`taos_consume`
等获取查询结果的函数,将导致应用Crash。
-
`char *taos_errstr(TAOS_RES *res)`
-
`char *taos_errstr(TAOS_RES *res)`
...
@@ -262,11 +262,11 @@ C/C++的API类似于MySQL的C API。应用程序使用时,需要包含TDengine
...
@@ -262,11 +262,11 @@ C/C++的API类似于MySQL的C API。应用程序使用时,需要包含TDengine
获取最近一次API调用失败的原因,返回值为错误代码。
获取最近一次API调用失败的原因,返回值为错误代码。
**注意**
:
对于每个数据库应用,2.0及以上版本 TDengine 推荐只建立一个连接。同时在应用中将该连接 (TAOS
*
) 结构体传递到不同的线程共享使用。基于 TAOS 结构体发出的查询、写入等操作具有多线程安全性。
C 语言的连接器可以按照需求动态建立面向数据库的新连接(该过程对用户不可见),同时建议只有在程序最后退出的时候才调用 taos_close 关闭连接。
**注意**
:
2.0及以上版本 TDengine 推荐数据库应用的每个线程都建立一个独立的连接,或基于线程建立连接池。而不推荐在应用中将该连接 (TAOS
\*
) 结构体传递到不同的线程共享使用。基于 TAOS 结构体发出的查询、写入等操作具有多线程安全性,但 “USE statement” 等状态量有可能在线程之间相互干扰。此外,
C 语言的连接器可以按照需求动态建立面向数据库的新连接(该过程对用户不可见),同时建议只有在程序最后退出的时候才调用 taos_close 关闭连接。
### 异步查询API
### 异步查询API
同步API之外,TDengine还提供性能更高的异步调用API处理数据插入、查询操作。在软硬件环境相同的情况下,异步API处理数据插入的速度比同步API快2~4倍。异步API采用非阻塞式的调用方式,在系统真正完成某个具体数据库操作前,立即返回。调用的线程可以去处理其他工作,从而可以提升整个应用的性能。异步API在网络延迟严重的情况下,优点尤为突出。
同步API之外,TDengine还提供性能更高的异步调用API处理数据插入、查询操作。在软硬件环境相同的情况下,异步API处理数据插入的速度比同步API快2
\
~
4倍。异步API采用非阻塞式的调用方式,在系统真正完成某个具体数据库操作前,立即返回。调用的线程可以去处理其他工作,从而可以提升整个应用的性能。异步API在网络延迟严重的情况下,优点尤为突出。
异步API都需要应用提供相应的回调函数,回调函数参数设置如下:前两个参数都是一致的,第三个参数依不同的API而定。第一个参数param是应用调用异步API时提供给系统的,用于回调时,应用能够找回具体操作的上下文,依具体实现而定。第二个参数是SQL操作的结果集,如果为空,比如insert操作,表示没有记录返回,如果不为空,比如select操作,表示有记录返回。
异步API都需要应用提供相应的回调函数,回调函数参数设置如下:前两个参数都是一致的,第三个参数依不同的API而定。第一个参数param是应用调用异步API时提供给系统的,用于回调时,应用能够找回具体操作的上下文,依具体实现而定。第二个参数是SQL操作的结果集,如果为空,比如insert操作,表示没有记录返回,如果不为空,比如select操作,表示有记录返回。
...
@@ -425,7 +425,7 @@ cd C:\TDengine\connector\python\windows
...
@@ -425,7 +425,7 @@ cd C:\TDengine\connector\python\windows
python -m pip install python3\
python -m pip install python3\
```
```
*
如果机器上没有pip命令,用户可将src/connector/python/python3或src/connector/python/python2下的taos文件夹拷贝到应用程序的目录使用。
*
如果机器上没有pip命令,用户可将src/connector/python/python3或src/connector/python/python2下的taos文件夹拷贝到应用程序的目录使用。
对于windows 客户端,安装TDengine windows 客户端后,将C:
\T
Dengine
\d
river
\t
aos.dll拷贝到C:
\w
indows
\s
ystem32目录下即可。
对于windows 客户端,安装TDengine windows 客户端后,将C:
\T
Dengine
\d
river
\t
aos.dll拷贝到C:
\w
indows
\s
ystem32目录下即可。
### 使用
### 使用
...
@@ -442,7 +442,7 @@ import taos
...
@@ -442,7 +442,7 @@ import taos
conn
=
taos
.
connect
(
host
=
"127.0.0.1"
,
user
=
"root"
,
password
=
"taosdata"
,
config
=
"/etc/taos"
)
conn
=
taos
.
connect
(
host
=
"127.0.0.1"
,
user
=
"root"
,
password
=
"taosdata"
,
config
=
"/etc/taos"
)
c1
=
conn
.
cursor
()
c1
=
conn
.
cursor
()
```
```
*
<em>
host
</em>
是TDengine 服务端所有IP,
<em>
config
</em>
为客户端配置文件所在目录
*
<em>
host
</em>
是TDengine 服务端所有IP,
<em>
config
</em>
为客户端配置文件所在目录
*
写入数据
*
写入数据
```
python
```
python
...
@@ -510,17 +510,17 @@ conn.close()
...
@@ -510,17 +510,17 @@ conn.close()
用户可通过python的帮助信息直接查看模块的使用信息,或者参考tests/examples/python中的示例程序。以下为部分常用类和方法:
用户可通过python的帮助信息直接查看模块的使用信息,或者参考tests/examples/python中的示例程序。以下为部分常用类和方法:
-
_TDengineConnection_类
-
_TDengineConnection_
类
参考python中help(taos.TDengineConnection)。
参考python中help(taos.TDengineConnection)。
这个类对应客户端和TDengine建立的一个连接。在客户端多线程的场景下,
这个连接实例可以是每个线程申请一个,也可以
多线程共享一个连接。
这个类对应客户端和TDengine建立的一个连接。在客户端多线程的场景下,
推荐每个线程申请一个独立的连接实例,而不建议
多线程共享一个连接。
-
_TDengineCursor_类
-
_TDengineCursor_
类
参考python中help(taos.TDengineCursor)。
参考python中help(taos.TDengineCursor)。
这个类对应客户端进行的写入、查询操作。在客户端多线程的场景下,这个游标实例必须保持线程独享,不能夸线程共享使用,否则会导致返回结果出现错误。
这个类对应客户端进行的写入、查询操作。在客户端多线程的场景下,这个游标实例必须保持线程独享,不能夸线程共享使用,否则会导致返回结果出现错误。
-
_connect_方法
-
_connect_
方法
用于生成taos.TDengineConnection的实例。
用于生成taos.TDengineConnection的实例。
...
@@ -800,7 +800,7 @@ go env -w GOPROXY=https://goproxy.io,direct
...
@@ -800,7 +800,7 @@ go env -w GOPROXY=https://goproxy.io,direct
-
`sql.Open(DRIVER_NAME string, dataSourceName string) *DB`
-
`sql.Open(DRIVER_NAME string, dataSourceName string) *DB`
该API用来打开DB,返回一个类型为
*
DB的对象,一般情况下,DRIVER_NAME设置为字符串
`taosSql`
, dataSourceName设置为字符串
`user:password@/tcp(host:port)/dbname`
,如果客户想要用多个goroutine并发访问TDengine, 那么需要在各个goroutine中分别创建一个sql.Open对象并用之访问TDengine
该API用来打开DB,返回一个类型为
\
*
DB的对象,一般情况下,DRIVER_NAME设置为字符串
`taosSql`
, dataSourceName设置为字符串
`user:password@/tcp(host:port)/dbname`
,如果客户想要用多个goroutine并发访问TDengine, 那么需要在各个goroutine中分别创建一个sql.Open对象并用之访问TDengine
**注意**
: 该API成功创建的时候,并没有做权限等检查,只有在真正执行Query或者Exec的时候才能真正的去创建连接,并同时检查user/password/host/port是不是合法。 另外,由于整个驱动程序大部分实现都下沉到taosSql所依赖的libtaos中。所以,sql.Open本身特别轻量。
**注意**
: 该API成功创建的时候,并没有做权限等检查,只有在真正执行Query或者Exec的时候才能真正的去创建连接,并同时检查user/password/host/port是不是合法。 另外,由于整个驱动程序大部分实现都下沉到taosSql所依赖的libtaos中。所以,sql.Open本身特别轻量。
...
@@ -822,7 +822,7 @@ go env -w GOPROXY=https://goproxy.io,direct
...
@@ -822,7 +822,7 @@ go env -w GOPROXY=https://goproxy.io,direct
-
`func (s *Stmt) Query(args ...interface{}) (*Rows, error)`
-
`func (s *Stmt) Query(args ...interface{}) (*Rows, error)`
sql.Open内置的方法,Query executes a prepared query statement with the given arguments and returns the query results as a
*
Rows.
sql.Open内置的方法,Query executes a prepared query statement with the given arguments and returns the query results as a
\
*
Rows.
-
`func (s *Stmt) Close() error`
-
`func (s *Stmt) Close() error`
...
@@ -894,7 +894,7 @@ Node-example-raw.js
...
@@ -894,7 +894,7 @@ Node-example-raw.js
验证方法:
验证方法:
1.
新建安装验证目录,例如:~/tdengine-test,拷贝github上nodejsChecker.js源程序。下载地址:(https://github.com/taosdata/TDengine/tree/develop/tests/examples/nodejs/nodejsChecker.js)。
1.
新建安装验证目录,例如:
\
~
/tdengine-test,拷贝github上nodejsChecker.js源程序。下载地址:(https://github.com/taosdata/TDengine/tree/develop/tests/examples/nodejs/nodejsChecker.js)。
2.
在命令中执行以下命令:
2.
在命令中执行以下命令:
...
...
packaging/cfg/taos.cfg
浏览文件 @
636c66bd
...
@@ -159,10 +159,10 @@
...
@@ -159,10 +159,10 @@
# stop writing logs when the disk size of the log folder is less than this value
# stop writing logs when the disk size of the log folder is less than this value
# minimalLogDirGB 0.1
# minimalLogDirGB 0.1
# stop writing temporary files when the disk size of the
log
folder is less than this value
# stop writing temporary files when the disk size of the
tmp
folder is less than this value
# minimalTmpDirGB 0.1
# minimalTmpDirGB 0.1
#
stop writing data when the disk size of the log folder is less than this value
#
if disk free space is less than this value, taosd service exit directly within startup process
# minimalDataDirGB 0.1
# minimalDataDirGB 0.1
# One mnode is equal to the number of vnode consumed
# One mnode is equal to the number of vnode consumed
...
...
src/client/src/tscSQLParser.c
浏览文件 @
636c66bd
...
@@ -6101,8 +6101,10 @@ void tscPrintSelectClause(SSqlObj* pSql, int32_t subClauseIndex) {
...
@@ -6101,8 +6101,10 @@ void tscPrintSelectClause(SSqlObj* pSql, int32_t subClauseIndex) {
int32_t
tmpLen
=
0
;
int32_t
tmpLen
=
0
;
tmpLen
=
tmpLen
=
sprintf
(
tmpBuf
,
"%s(uid:%"
PRId64
", %d)"
,
aAggs
[
pExpr
->
functionId
].
aName
,
pExpr
->
uid
,
pExpr
->
colInfo
.
colId
);
sprintf
(
tmpBuf
,
"%s(uid:%"
PRId64
", %d)"
,
aAggs
[
pExpr
->
functionId
].
aName
,
pExpr
->
uid
,
pExpr
->
colInfo
.
colId
);
if
(
tmpLen
+
offset
>=
totalBufSize
-
1
)
break
;
if
(
tmpLen
+
offset
>=
totalBufSize
-
1
)
break
;
offset
+=
sprintf
(
str
+
offset
,
"%s"
,
tmpBuf
);
offset
+=
sprintf
(
str
+
offset
,
"%s"
,
tmpBuf
);
if
(
i
<
size
-
1
)
{
if
(
i
<
size
-
1
)
{
...
@@ -6112,6 +6114,7 @@ void tscPrintSelectClause(SSqlObj* pSql, int32_t subClauseIndex) {
...
@@ -6112,6 +6114,7 @@ void tscPrintSelectClause(SSqlObj* pSql, int32_t subClauseIndex) {
assert
(
offset
<
totalBufSize
);
assert
(
offset
<
totalBufSize
);
str
[
offset
]
=
']'
;
str
[
offset
]
=
']'
;
assert
(
offset
<
totalBufSize
);
tscDebug
(
"%p select clause:%s"
,
pSql
,
str
);
tscDebug
(
"%p select clause:%s"
,
pSql
,
str
);
}
}
...
...
src/common/src/tvariant.c
浏览文件 @
636c66bd
...
@@ -399,6 +399,7 @@ static int32_t toNchar(tVariant *pVariant, char **pDest, int32_t *pDestSize) {
...
@@ -399,6 +399,7 @@ static int32_t toNchar(tVariant *pVariant, char **pDest, int32_t *pDestSize) {
pVariant
->
wpz
=
(
wchar_t
*
)
tmp
;
pVariant
->
wpz
=
(
wchar_t
*
)
tmp
;
}
else
{
}
else
{
int32_t
output
=
0
;
int32_t
output
=
0
;
bool
ret
=
taosMbsToUcs4
(
pDst
,
nLen
,
*
pDest
,
(
nLen
+
1
)
*
TSDB_NCHAR_SIZE
,
&
output
);
bool
ret
=
taosMbsToUcs4
(
pDst
,
nLen
,
*
pDest
,
(
nLen
+
1
)
*
TSDB_NCHAR_SIZE
,
&
output
);
if
(
!
ret
)
{
if
(
!
ret
)
{
return
-
1
;
return
-
1
;
...
...
src/inc/taosdef.h
浏览文件 @
636c66bd
...
@@ -444,7 +444,7 @@ int32_t tStrToInteger(const char* z, int16_t type, int32_t n, int64_t* value, bo
...
@@ -444,7 +444,7 @@ int32_t tStrToInteger(const char* z, int16_t type, int32_t n, int64_t* value, bo
#define TSDB_PORT_HTTP 11
#define TSDB_PORT_HTTP 11
#define TSDB_PORT_ARBITRATOR 12
#define TSDB_PORT_ARBITRATOR 12
#define TSDB_MAX_WAL_SIZE (1024*1024*
2
)
#define TSDB_MAX_WAL_SIZE (1024*1024*
3
)
typedef
enum
{
typedef
enum
{
TAOS_QTYPE_RPC
=
0
,
TAOS_QTYPE_RPC
=
0
,
...
...
src/query/src/qExecutor.c
浏览文件 @
636c66bd
...
@@ -3168,6 +3168,10 @@ void copyResToQueryResultBuf(SQInfo *pQInfo, SQuery *pQuery) {
...
@@ -3168,6 +3168,10 @@ void copyResToQueryResultBuf(SQInfo *pQInfo, SQuery *pQuery) {
// all results in current group have been returned to client, try next group
// all results in current group have been returned to client, try next group
if
(
pGroupResInfo
->
index
>=
taosArrayGetSize
(
pGroupResInfo
->
pRows
))
{
if
(
pGroupResInfo
->
index
>=
taosArrayGetSize
(
pGroupResInfo
->
pRows
))
{
// current results of group has been sent to client, try next group
// current results of group has been sent to client, try next group
pGroupResInfo
->
index
=
0
;
pGroupResInfo
->
rowId
=
0
;
taosArrayClear
(
pGroupResInfo
->
pRows
);
if
(
mergeGroupResult
(
pQInfo
)
!=
TSDB_CODE_SUCCESS
)
{
if
(
mergeGroupResult
(
pQInfo
)
!=
TSDB_CODE_SUCCESS
)
{
return
;
// failed to save data in the disk
return
;
// failed to save data in the disk
}
}
...
@@ -6928,11 +6932,12 @@ static size_t getResultSize(SQInfo *pQInfo, int64_t *numOfRows) {
...
@@ -6928,11 +6932,12 @@ static size_t getResultSize(SQInfo *pQInfo, int64_t *numOfRows) {
*/
*/
if
(
isTSCompQuery
(
pQuery
)
&&
(
*
numOfRows
)
>
0
)
{
if
(
isTSCompQuery
(
pQuery
)
&&
(
*
numOfRows
)
>
0
)
{
struct
stat
fStat
;
struct
stat
fStat
;
if
(
fstat
(
fileno
(
*
(
FILE
**
)
pQuery
->
sdata
[
0
]
->
data
),
&
fStat
)
==
0
)
{
FILE
*
f
=
*
(
FILE
**
)
pQuery
->
sdata
[
0
]
->
data
;
if
((
f
!=
NULL
)
&&
(
fstat
(
fileno
(
f
),
&
fStat
)
==
0
))
{
*
numOfRows
=
fStat
.
st_size
;
*
numOfRows
=
fStat
.
st_size
;
return
fStat
.
st_size
;
return
fStat
.
st_size
;
}
else
{
}
else
{
qError
(
"QInfo:%p failed to get file info,
path:%s, reason:%s"
,
pQInfo
,
pQuery
->
sdata
[
0
]
->
data
,
strerror
(
errno
));
qError
(
"QInfo:%p failed to get file info,
file:%p, reason:%s"
,
pQInfo
,
f
,
strerror
(
errno
));
return
0
;
return
0
;
}
}
}
else
{
}
else
{
...
@@ -6947,7 +6952,7 @@ static int32_t doDumpQueryResult(SQInfo *pQInfo, char *data) {
...
@@ -6947,7 +6952,7 @@ static int32_t doDumpQueryResult(SQInfo *pQInfo, char *data) {
// load data from file to msg buffer
// load data from file to msg buffer
if
(
isTSCompQuery
(
pQuery
))
{
if
(
isTSCompQuery
(
pQuery
))
{
FILE
*
f
=
*
(
FILE
**
)
pQuery
->
sdata
[
0
]
->
data
;
FILE
*
f
=
*
(
FILE
**
)
pQuery
->
sdata
[
0
]
->
data
;
// TODO refactor
// make sure file exist
// make sure file exist
if
(
f
)
{
if
(
f
)
{
...
...
src/sync/src/syncRetrieve.c
浏览文件 @
636c66bd
...
@@ -475,7 +475,8 @@ void *syncRetrieveData(void *param) {
...
@@ -475,7 +475,8 @@ void *syncRetrieveData(void *param) {
SSyncNode
*
pNode
=
pPeer
->
pSyncNode
;
SSyncNode
*
pNode
=
pPeer
->
pSyncNode
;
taosBlockSIGPIPE
();
taosBlockSIGPIPE
();
sInfo
(
"%s, start to retrieve data, sstatus:%s"
,
pPeer
->
id
,
syncStatus
[
pPeer
->
sstatus
]);
sInfo
(
"%s, start to retrieve data, sstatus:%s, numOfRetrieves:%d"
,
pPeer
->
id
,
syncStatus
[
pPeer
->
sstatus
],
pPeer
->
numOfRetrieves
);
if
(
pNode
->
notifyFlowCtrl
)
(
*
pNode
->
notifyFlowCtrl
)(
pNode
->
vgId
,
pPeer
->
numOfRetrieves
);
if
(
pNode
->
notifyFlowCtrl
)
(
*
pNode
->
notifyFlowCtrl
)(
pNode
->
vgId
,
pPeer
->
numOfRetrieves
);
...
@@ -497,9 +498,11 @@ void *syncRetrieveData(void *param) {
...
@@ -497,9 +498,11 @@ void *syncRetrieveData(void *param) {
pPeer
->
numOfRetrieves
++
;
pPeer
->
numOfRetrieves
++
;
}
else
{
}
else
{
pPeer
->
numOfRetrieves
=
0
;
pPeer
->
numOfRetrieves
=
0
;
if
(
pNode
->
notifyFlowCtrl
)
(
*
pNode
->
notifyFlowCtrl
)(
pNode
->
vgId
,
0
);
//
if (pNode->notifyFlowCtrl) (*pNode->notifyFlowCtrl)(pNode->vgId, 0);
}
}
if
(
pNode
->
notifyFlowCtrl
)
(
*
pNode
->
notifyFlowCtrl
)(
pNode
->
vgId
,
0
);
pPeer
->
fileChanged
=
0
;
pPeer
->
fileChanged
=
0
;
taosClose
(
pPeer
->
syncFd
);
taosClose
(
pPeer
->
syncFd
);
...
...
src/vnode/src/vnodeWrite.c
浏览文件 @
636c66bd
...
@@ -308,7 +308,7 @@ static void vnodeFlowCtrlMsgToWQueue(void *param, void *tmrId) {
...
@@ -308,7 +308,7 @@ static void vnodeFlowCtrlMsgToWQueue(void *param, void *tmrId) {
if
(
pVnode
->
flowctrlLevel
<=
0
)
code
=
TSDB_CODE_VND_IS_FLOWCTRL
;
if
(
pVnode
->
flowctrlLevel
<=
0
)
code
=
TSDB_CODE_VND_IS_FLOWCTRL
;
pWrite
->
processedCount
++
;
pWrite
->
processedCount
++
;
if
(
pWrite
->
processedCount
>
100
)
{
if
(
pWrite
->
processedCount
>
=
100
)
{
vError
(
"vgId:%d, msg:%p, failed to process since %s, retry:%d"
,
pVnode
->
vgId
,
pWrite
,
tstrerror
(
code
),
vError
(
"vgId:%d, msg:%p, failed to process since %s, retry:%d"
,
pVnode
->
vgId
,
pWrite
,
tstrerror
(
code
),
pWrite
->
processedCount
);
pWrite
->
processedCount
);
pWrite
->
processedCount
=
1
;
pWrite
->
processedCount
=
1
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录