Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
558787ac
T
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1185
Star
22016
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
558787ac
编写于
12月 06, 2020
作者:
S
Shengliang Guan
提交者:
GitHub
12月 06, 2020
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'develop' into release/s107
上级
555125af
53e50339
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
112 addition
and
16 deletion
+112
-16
documentation20/webdocs/markdowndocs/Model-ch.md
documentation20/webdocs/markdowndocs/Model-ch.md
+6
-4
documentation20/webdocs/markdowndocs/faq-ch.md
documentation20/webdocs/markdowndocs/faq-ch.md
+9
-5
src/client/inc/tscUtil.h
src/client/inc/tscUtil.h
+1
-1
tests/pytest/fulltest.sh
tests/pytest/fulltest.sh
+2
-0
tests/pytest/query/bug2117.py
tests/pytest/query/bug2117.py
+21
-6
tests/pytest/query/bug2143.py
tests/pytest/query/bug2143.py
+73
-0
未找到文件。
documentation20/webdocs/markdowndocs/Model-ch.md
浏览文件 @
558787ac
...
@@ -12,7 +12,7 @@ TDengine采用关系型数据模型,需要建库、建表。因此对于一个
...
@@ -12,7 +12,7 @@ TDengine采用关系型数据模型,需要建库、建表。因此对于一个
CREATE DATABASE power KEEP 365 DAYS 10 BLOCKS 4;
CREATE DATABASE power KEEP 365 DAYS 10 BLOCKS 4;
```
```
上述语句将创建一个名为power的库,这个库的数据将保留365天(超过365天将被自动删除),每10天一个数据文件,内存块数为4。详细的语法及参数请见
<a
href=
"https://www.taosdata.com/cn/documentation20/taos-sql/"
>
TAOS SQL
</a>
上述语句将创建一个名为power的库,这个库的数据将保留365天(超过365天将被自动删除),每10天一个数据文件,内存块数为4。详细的语法及参数请见
<a
href=
"https://www.taosdata.com/cn/documentation20/taos-sql/"
>
TAOS SQL
</a>
创建库之后,需要使用SQL命令USE将当前库切换过来,例如:
创建库之后,需要使用SQL命令USE将当前库切换过来,例如:
```
cmd
```
cmd
...
@@ -20,7 +20,7 @@ USE power;
...
@@ -20,7 +20,7 @@ USE power;
```
```
就当前连接里操作的库换为power,否则对具体表操作前,需要使用“库名.表名”来指定库的名字。
就当前连接里操作的库换为power,否则对具体表操作前,需要使用“库名.表名”来指定库的名字。
**注意:**
**注意:**
-
任何一张表或超级表是属于一个库的,在创建表之前,必须先创建库。
-
任何一张表或超级表是属于一个库的,在创建表之前,必须先创建库。
...
@@ -44,15 +44,17 @@ CREATE TABLE d1001 USING meters TAGS ("Beijing.Chaoyang", 2);
...
@@ -44,15 +44,17 @@ CREATE TABLE d1001 USING meters TAGS ("Beijing.Chaoyang", 2);
```
```
其中d1001是表名,meters是超级表的表名,后面紧跟标签Location的具体标签值”Beijing.Chaoyang",标签groupId的具体标签值2。虽然在创建表时,需要指定标签值,但可以事后修改。详细细则请见 TAOS SQL。
其中d1001是表名,meters是超级表的表名,后面紧跟标签Location的具体标签值”Beijing.Chaoyang",标签groupId的具体标签值2。虽然在创建表时,需要指定标签值,但可以事后修改。详细细则请见 TAOS SQL。
**注意:**
目前 TDengine 没有从技术层面限制使用一个 database (dbA)的超级表作为模板建立另一个 database (dbB)的子表,后续会禁止这种用法,不建议使用这种方法建表。
TDengine建议将数据采集点的全局唯一ID作为表名(比如设备序列号)。但对于有的场景,并没有唯一的ID,可以将多个ID组合成一个唯一的ID。不建议将具有唯一性的ID作为标签值。
TDengine建议将数据采集点的全局唯一ID作为表名(比如设备序列号)。但对于有的场景,并没有唯一的ID,可以将多个ID组合成一个唯一的ID。不建议将具有唯一性的ID作为标签值。
**自动建表**
:在某些特殊场景中,用户在写数据时并不确定某个数据采集点的表是否存在,此时可在写入数据时使用自动建表语法来创建不存在的表,若该表已存在则不会建立新表。比如:
**自动建表**
:在某些特殊场景中,用户在写数据时并不确定某个数据采集点的表是否存在,此时可在写入数据时使用自动建表语法来创建不存在的表,若该表已存在则不会建立新表。比如:
```
cmd
```
cmd
INSERT INTO d1001 USING METERS TAGS ("Beijng.Chaoyang", 2) VALUES (now, 10.2, 219, 0.32);
INSERT INTO d1001 USING METERS TAGS ("Beijng.Chaoyang", 2) VALUES (now, 10.2, 219, 0.32);
```
```
上述SQL语句将记录(now, 10.2, 219, 0.32) 插入进表d1001。如果表d1001还未创建,则使用超级表meters做模板自动创建,同时打上标签值“Beijing.Chaoyang", 2。
上述SQL语句将记录(now, 10.2, 219, 0.32) 插入进表d1001。如果表d1001还未创建,则使用超级表meters做模板自动创建,同时打上标签值“Beijing.Chaoyang", 2。
## 多列模型 vs 单列模型
## 多列模型 vs 单列模型
TDengine支持多列模型,只要物理量是一个数据采集点同时采集的(时间戳一致),这些量就可以作为不同列放在一张超级表里。但还有一种极限的设计,单列模型,每个采集的物理量都单独建表,因此每种类型的物理量都单独建立一超级表。比如电流、电压、相位,就建三张超级表。
TDengine支持多列模型,只要物理量是一个数据采集点同时采集的(时间戳一致),这些量就可以作为不同列放在一张超级表里。但还有一种极限的设计,单列模型,每个采集的物理量都单独建表,因此每种类型的物理量都单独建立一超级表。比如电流、电压、相位,就建三张超级表。
...
...
documentation20/webdocs/markdowndocs/faq-ch.md
浏览文件 @
558787ac
...
@@ -36,16 +36,20 @@
...
@@ -36,16 +36,20 @@
5.
ping服务器FQDN,如果没有反应,请检查你的网络,DNS设置,或客户端所在计算机的系统hosts文件
5.
ping服务器FQDN,如果没有反应,请检查你的网络,DNS设置,或客户端所在计算机的系统hosts文件
6.
检查防火墙设置,确认TCP/UDP 端口6030-6042 是打开的
6.
检查防火墙设置
(Ubuntu 使用 ufw status,CentOS 使用 firewall-cmd --list-port)
,确认TCP/UDP 端口6030-6042 是打开的
7.
对于Linux上的JDBC(ODBC, Python, Go等接口类似)连接, 确保
*libtaos.so*
在目录
*/usr/local/taos/driver*
里, 并且
*/usr/local/taos/driver*
在系统库函数搜索路径
*LD_LIBRARY_PATH*
里
7.
对于Linux上的JDBC(ODBC, Python, Go等接口类似)连接, 确保
*libtaos.so*
在目录
*/usr/local/taos/driver*
里, 并且
*/usr/local/taos/driver*
在系统库函数搜索路径
*LD_LIBRARY_PATH*
里
8.
对于windows上的JDBC, ODBC, Python, Go等连接,确保
*C:\TDengine\driver\taos.dll*
在你的系统库函数搜索目录里 (建议
*taos.dll*
放在目录
*C:\Windows\System32*
)
8.
对于windows上的JDBC, ODBC, Python, Go等连接,确保
*C:\TDengine\driver\taos.dll*
在你的系统库函数搜索目录里 (建议
*taos.dll*
放在目录
*C:\Windows\System32*
)
9.
如果仍不能排除连接故障,请使用命令行工具nc来分别判断指定端口的TCP和UDP连接是否通畅
9.
如果仍不能排除连接故障
检查UDP端口连接是否工作:
`nc -vuz {hostIP} {port} `
检查服务器侧TCP端口连接是否工作:
`nc -l {port}`
*
Linux 系统请使用命令行工具nc来分别判断指定端口的TCP和UDP连接是否通畅
检查客户端侧TCP端口连接是否工作:
`nc {hostIP} {port}`
检查UDP端口连接是否工作:
`nc -vuz {hostIP} {port} `
检查服务器侧TCP端口连接是否工作:
`nc -l {port}`
检查客户端侧TCP端口连接是否工作:
`nc {hostIP} {port}`
*
Windows 系统请使用 PowerShell 命令 Net-TestConnection -ComputerName {fqdn} -Port {port} 检测服务段端口是否访问
10.
也可以使用taos程序内嵌的网络连通检测功能,来验证服务器和客户端之间指定的端口连接是否通畅(包括TCP和UDP):
[
TDengine 内嵌网络检测工具使用指南
](
https://www.taosdata.com/blog/2020/09/08/1816.html
)
。
10.
也可以使用taos程序内嵌的网络连通检测功能,来验证服务器和客户端之间指定的端口连接是否通畅(包括TCP和UDP):
[
TDengine 内嵌网络检测工具使用指南
](
https://www.taosdata.com/blog/2020/09/08/1816.html
)
。
...
...
src/client/inc/tscUtil.h
浏览文件 @
558787ac
...
@@ -92,7 +92,7 @@ typedef struct SVgroupTableInfo {
...
@@ -92,7 +92,7 @@ typedef struct SVgroupTableInfo {
}
SVgroupTableInfo
;
}
SVgroupTableInfo
;
static
FORCE_INLINE
SQueryInfo
*
tscGetQueryInfoDetail
(
SSqlCmd
*
pCmd
,
int32_t
subClauseIndex
)
{
static
FORCE_INLINE
SQueryInfo
*
tscGetQueryInfoDetail
(
SSqlCmd
*
pCmd
,
int32_t
subClauseIndex
)
{
assert
(
pCmd
!=
NULL
&&
subClauseIndex
>=
0
&&
subClauseIndex
<
TSDB_MAX_UNION_CLAUSE
);
assert
(
pCmd
!=
NULL
&&
subClauseIndex
>=
0
);
if
(
pCmd
->
pQueryInfo
==
NULL
||
subClauseIndex
>=
pCmd
->
numOfClause
)
{
if
(
pCmd
->
pQueryInfo
==
NULL
||
subClauseIndex
>=
pCmd
->
numOfClause
)
{
return
NULL
;
return
NULL
;
...
...
tests/pytest/fulltest.sh
浏览文件 @
558787ac
...
@@ -160,6 +160,8 @@ python3 ./test.py -f query/bug1874.py
...
@@ -160,6 +160,8 @@ python3 ./test.py -f query/bug1874.py
python3 ./test.py
-f
query/bug1875.py
python3 ./test.py
-f
query/bug1875.py
python3 ./test.py
-f
query/bug1876.py
python3 ./test.py
-f
query/bug1876.py
python3 ./test.py
-f
query/bug2218.py
python3 ./test.py
-f
query/bug2218.py
python3 ./test.py
-f
query/bug2117.py
python3 ./test.py
-f
query/bug2143.py
python3 ./test.py
-f
query/sliding.py
python3 ./test.py
-f
query/sliding.py
#stream
#stream
...
...
tests/pytest/query/bug2117.py
浏览文件 @
558787ac
...
@@ -33,14 +33,29 @@ class TDTestCase:
...
@@ -33,14 +33,29 @@ class TDTestCase:
for
i
in
range
(
insertRows
):
for
i
in
range
(
insertRows
):
ret
=
tdSql
.
execute
(
ret
=
tdSql
.
execute
(
"insert into mt0 values (%d , %d,%d,%d,%d,%d,%d,%d,'%s','%s')"
%
"insert into mt0 values (%d , %d,%d,%d,%d,%d,%d,%d,'%s','%s')"
%
(
t0
+
i
,
i
%
100
,
i
/
2
,
i
%
41
,
i
%
100
,
i
%
100
,
i
*
1.0
,
i
%
2
,
'taos'
+
str
(
i
%
100
),
'涛思'
+
str
(
i
%
100
)))
(
t0
+
i
,
i
%
100
,
i
/
2
.0
,
i
%
41
,
i
%
51
,
i
%
53
,
i
*
1.0
,
i
%
2
,
'taos'
+
str
(
i
%
43
),
'涛思'
+
str
(
i
%
41
)))
print
(
"==========step2"
)
print
(
"==========step2"
)
print
(
"test last with group by normal_col "
)
print
(
"test last with group by normal_col "
)
tdSql
.
query
(
'select last(c1) from mt0 group by c3'
)
tdSql
.
query
(
'select last(*) from mt0 group by c3'
)
tdSql
.
checkData
(
0
,
0
,
84
)
tdSql
.
checkData
(
0
,
1
,
84
)
tdSql
.
checkData
(
0
,
1
,
85
)
tdSql
.
checkData
(
0
,
9
,
'涛思0'
)
tdSql
.
checkData
(
1
,
1
,
85
)
tdSql
.
checkData
(
1
,
9
,
'涛思1'
)
tdSql
.
query
(
'select last(*) from mt0 group by c7'
)
tdSql
.
checkData
(
0
,
1
,
98
)
tdSql
.
checkData
(
0
,
9
,
'涛思14'
)
tdSql
.
checkData
(
1
,
1
,
99
)
tdSql
.
checkData
(
1
,
9
,
'涛思15'
)
tdSql
.
query
(
'select last(*) from mt0 group by c8'
)
tdSql
.
checkData
(
0
,
3
,
5
)
tdSql
.
checkData
(
0
,
4
,
20
)
tdSql
.
checkData
(
3
,
1
,
92
)
tdSql
.
checkData
(
3
,
9
,
'涛思8'
)
tdSql
.
query
(
'select last(*) from mt0 group by c9'
)
tdSql
.
checkData
(
0
,
3
,
0
)
tdSql
.
checkData
(
0
,
8
,
'taos38'
)
tdSql
.
checkData
(
40
,
1
,
83
)
tdSql
.
checkData
(
40
,
3
,
40
)
def
stop
(
self
):
def
stop
(
self
):
tdSql
.
close
()
tdSql
.
close
()
...
...
tests/pytest/query/bug2143.py
0 → 100644
浏览文件 @
558787ac
###################################################################
# Copyright (c) 2016 by TAOS Technologies, Inc.
# All rights reserved.
#
# This file is proprietary and confidential to TAOS Technologies.
# No part of this file may be reproduced, stored, transmitted,
# disclosed or used in any form or by any means other than as
# expressly provided by the written permission from Jianhui Tao
#
###################################################################
# -*- coding: utf-8 -*-
import
sys
from
util.log
import
*
from
util.cases
import
*
from
util.sql
import
*
from
util.dnodes
import
*
class
TDTestCase
:
def
init
(
self
,
conn
,
logSql
):
tdLog
.
debug
(
"start to execute %s"
%
__file__
)
tdSql
.
init
(
conn
.
cursor
(),
logSql
)
def
run
(
self
):
tdSql
.
prepare
()
print
(
"==========step1"
)
print
(
"create table && insert data"
)
tdSql
.
execute
(
"create table mt0 (ts timestamp, c1 int, c2 float, c3 bigint, c4 smallint, c5 tinyint, c6 double, c7 bool,c8 binary(20),c9 nchar(20))"
)
insertRows
=
1000
t0
=
1604298064000
tdLog
.
info
(
"insert %d rows"
%
(
insertRows
))
for
i
in
range
(
insertRows
):
ret
=
tdSql
.
execute
(
"insert into mt0 values (%d , %d,%d,%d,%d,%d,%d,%d,'%s','%s')"
%
(
t0
+
i
,
i
%
100
,
i
/
2.0
,
i
%
41
,
i
%
51
,
i
%
53
,
i
*
1.0
,
i
%
2
,
'taos'
+
str
(
i
%
43
),
'涛思'
+
str
(
i
%
41
)))
print
(
"==========step2"
)
print
(
"test group by normal_col with limit offset"
)
tdSql
.
query
(
'select max(c1),min(c1),first(c1),last(c1) from mt0 group by c3 limit 3 offset 2'
)
tdSql
.
checkData
(
0
,
0
,
99
)
tdSql
.
checkData
(
0
,
1
,
2
)
tdSql
.
checkData
(
0
,
2
,
2
)
tdSql
.
checkData
(
0
,
3
,
86
)
tdSql
.
checkData
(
1
,
0
,
95
)
tdSql
.
checkData
(
2
,
1
,
1
)
tdSql
.
query
(
'select max(c1),min(c1),first(c1),last(c1) from mt0 group by c3 limit 3 offset 40'
)
tdSql
.
checkRows
(
1
)
tdSql
.
query
(
'select max(c1),min(c1),first(c1),last(c1) from mt0 group by c3 limit 3 offset 41'
)
tdSql
.
checkRows
(
0
)
tdSql
.
query
(
'select max(c1),min(c1),first(c1),last(c1) from mt0 group by c3 limit 3 offset 99'
)
tdSql
.
checkRows
(
0
)
tdSql
.
query
(
'select max(c1),min(c1),first(c1),last(c1) from mt0 group by c3 limit 70 offset 3'
)
tdSql
.
checkRows
(
38
)
tdSql
.
query
(
'select max(c1),min(c1),first(c1),last(c1) from mt0 group by c8 limit 3 offset 2'
)
tdSql
.
checkData
(
0
,
0
,
91
)
tdSql
.
checkData
(
0
,
1
,
2
)
tdSql
.
checkData
(
0
,
2
,
2
)
tdSql
.
checkData
(
0
,
3
,
91
)
tdSql
.
checkData
(
1
,
0
,
92
)
tdSql
.
checkData
(
2
,
1
,
4
)
tdSql
.
query
(
'select max(c1),min(c1),first(c1),last(c1) from mt0 group by c9 limit 2 offset 9'
)
tdSql
.
checkData
(
0
,
0
,
96
)
tdSql
.
checkData
(
0
,
1
,
1
)
tdSql
.
checkData
(
0
,
2
,
9
)
tdSql
.
checkData
(
0
,
3
,
93
)
tdSql
.
checkData
(
1
,
0
,
97
)
def
stop
(
self
):
tdSql
.
close
()
tdLog
.
success
(
"%s successfully executed"
%
__file__
)
tdCases
.
addWindows
(
__file__
,
TDTestCase
())
tdCases
.
addLinux
(
__file__
,
TDTestCase
())
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录