Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
2ad7f585
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1185
Star
22016
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
2ad7f585
编写于
12月 01, 2021
作者:
S
shenglian zhou
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branch 'origin/develop' into szhou/hotfix/sml-tiny-batch
上级
6dd86242
ea155cd5
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
38 addition
and
21 deletion
+38
-21
Jenkinsfile
Jenkinsfile
+6
-0
documentation20/cn/05.insert/docs.md
documentation20/cn/05.insert/docs.md
+20
-11
documentation20/cn/14.devops/03.immigrate/docs.md
documentation20/cn/14.devops/03.immigrate/docs.md
+1
-1
src/connector/grafana-pluain-is-removed-from-TDengine.md
src/connector/grafana-pluain-is-removed-from-TDengine.md
+1
-0
tests/pytest/query/queryLike.py
tests/pytest/query/queryLike.py
+10
-9
未找到文件。
Jenkinsfile
浏览文件 @
2ad7f585
...
...
@@ -66,10 +66,12 @@ def pre_test(){
}
sh
'''
cd ${WKC}
[ -f src/connector/grafanaplugin/README.md ] && rm -f src/connector/grafanaplugin/README.md > /dev/null || echo "failed to remove grafanaplugin README.md"
git pull >/dev/null
git fetch origin +refs/pull/${CHANGE_ID}/merge
git checkout -qf FETCH_HEAD
git clean -dfx
git ls-files --stage | grep 160000 | awk '{print $4}' | xargs git rm --cached
git submodule update --init --recursive
cd ${WK}
git reset --hard HEAD~10
...
...
@@ -139,10 +141,12 @@ def pre_test_noinstall(){
}
sh
'''
cd ${WKC}
[ -f src/connector/grafanaplugin/README.md ] && rm -f src/connector/grafanaplugin/README.md > /dev/null || echo "failed to remove grafanaplugin README.md"
git pull >/dev/null
git fetch origin +refs/pull/${CHANGE_ID}/merge
git checkout -qf FETCH_HEAD
git clean -dfx
git ls-files --stage | grep 160000 | awk '{print $4}' | xargs git rm --cached
git submodule update --init --recursive
cd ${WK}
git reset --hard HEAD~10
...
...
@@ -209,10 +213,12 @@ def pre_test_mac(){
}
sh
'''
cd ${WKC}
[ -f src/connector/grafanaplugin/README.md ] && rm -f src/connector/grafanaplugin/README.md > /dev/null || echo "failed to remove grafanaplugin README.md"
git pull >/dev/null
git fetch origin +refs/pull/${CHANGE_ID}/merge
git checkout -qf FETCH_HEAD
git clean -dfx
git ls-files --stage | grep 160000 | awk '{print $4}' | xargs git rm --cached
git submodule update --init --recursive
cd ${WK}
git reset --hard HEAD~10
...
...
documentation20/cn/05.insert/docs.md
浏览文件 @
2ad7f585
...
...
@@ -29,7 +29,7 @@ INSERT INTO d1001 VALUES (1538548685000, 10.3, 219, 0.31) (1538548695000, 12.6,
## <a class="anchor" id="schemaless"></a>无模式(Schemaless)写入
**前言**
<br/>
在物联网应用中,常会采集比较多的数据项,用于实现智能控制、业务分析、设备监控等。由于应用逻辑的版本升级,或者设备自身的硬件调整等原因,数据采集项就有可能比较频繁地出现变动。为了在这种情况下方便地完成数据记录工作,TDengine 从 2.2.0.0 版本开始,提供调用 Schemaless 写入方式,可以免于预先创建超级表/子表的步骤,随着数据写入
写入
接口能够自动创建与数据对应的存储结构。并且在必要时,Schemaless 将自动增加必要的数据列,保证用户写入的数据可以被正确存储。
<br/>
在物联网应用中,常会采集比较多的数据项,用于实现智能控制、业务分析、设备监控等。由于应用逻辑的版本升级,或者设备自身的硬件调整等原因,数据采集项就有可能比较频繁地出现变动。为了在这种情况下方便地完成数据记录工作,TDengine 从 2.2.0.0 版本开始,提供调用 Schemaless 写入方式,可以免于预先创建超级表/子表的步骤,随着数据写入接口能够自动创建与数据对应的存储结构。并且在必要时,Schemaless 将自动增加必要的数据列,保证用户写入的数据可以被正确存储。
<br/>
目前,TDengine 的 C/C++ Connector 提供支持 Schemaless 的操作接口,详情请参见
[
Schemaless 方式写入接口
](
https://www.taosdata.com/cn/documentation/connector#schemaless
)
章节。这里对 Schemaless 的数据表达格式进行了描述。
<br/>
无模式写入方式建立的超级表及其对应的子表与通过 SQL 直接建立的超级表和子表完全没有区别,您也可以通过 SQL 语句直接向其中写入数据。需要注意的是,通过无模式写入方式建立的表,其表名是基于标签值按照固定的映射规则生成,所以无法明确地进行表意,缺乏可读性。
...
...
@@ -74,21 +74,19 @@ st,t1=3,t2=4,t3=t3 c1=3i64,c3="passit",c2=false,c4=4f64 1626006833639000000
### 无模式写入的主要处理逻辑
无模式写入按照如下原则来处理行数据:
1.
当 tag_set 中有 ID 字段时,该字段的值将作为子表的表名。
2.
没有 ID 字段时,将使用如下规则来生成子表名:
首先将measurement 的名称和标签的 key 和 value 组合成为如下的字符串
<br/>
1. 将使用如下规则来生成子表名:首先将measurement 的名称和标签的 key 和 value 组合成为如下的字符串
```
json
"measurement,tag_key1=tag_value1,tag_key2=tag_value2"
```
需要注意的是,这里的tag_key1, tag_key2并不是用户输入的标签的原始顺序,而是使用了标签名称按照字符串升序排列后的结果。所以,tag_key1 并不是在行协议中输入的第一个标签。
排列完成以后计算该字符串的 MD5 散列值 "md5_val"。然后将计算的结果与字符串组合生成表名:“t_md5_val”。其中的 “t_” 是固定的前缀,每个通过该映射关系自动生成的表都具有该前缀。
<br/>
3
. 如果解析行协议获得的超级表不存在,则会创建这个超级表。
<br/>
4
. 如果解析行协议获得子表不存在,则 Schemaless 会按照步骤 1 或 2 确定的子表名来创建子表。
<br/>
5
. 如果数据行中指定的标签列或普通列不存在,则在超级表中增加对应的标签列或普通列(只增不减)。
<br/>
6
. 如果超级表中存在一些标签列或普通列未在一个数据行中被指定取值,那么这些列的值在这一行中会被置为 NULL。
<br/>
7
. 对 BINARY 或 NCHAR 列,如果数据行中所提供值的长度超出了列类型的限制,自动增加该列允许存储的字符长度上限(只增不减),以保证数据的完整保存。
<br/>
8
. 如果指定的数据子表已经存在,而且本次指定的标签列取值跟已保存的值不一样,那么最新的数据行中的值会覆盖旧的标签列取值。
<br/>
9
. 整个处理过程中遇到的错误会中断写入过程,并返回错误代码。
<br/>
2
. 如果解析行协议获得的超级表不存在,则会创建这个超级表。
<br/>
3
. 如果解析行协议获得子表不存在,则 Schemaless 会按照步骤 1 或 2 确定的子表名来创建子表。
<br/>
4
. 如果数据行中指定的标签列或普通列不存在,则在超级表中增加对应的标签列或普通列(只增不减)。
<br/>
5
. 如果超级表中存在一些标签列或普通列未在一个数据行中被指定取值,那么这些列的值在这一行中会被置为 NULL。
<br/>
6
. 对 BINARY 或 NCHAR 列,如果数据行中所提供值的长度超出了列类型的限制,自动增加该列允许存储的字符长度上限(只增不减),以保证数据的完整保存。
<br/>
7
. 如果指定的数据子表已经存在,而且本次指定的标签列取值跟已保存的值不一样,那么最新的数据行中的值会覆盖旧的标签列取值。
<br/>
8
. 整个处理过程中遇到的错误会中断写入过程,并返回错误代码。
**备注:**
<br/>
无模式所有的处理逻辑,仍会遵循 TDengine 对数据结构的底层限制,例如每行数据的总长度不能超过 16k 字节。这方面的具体限制约束请参见
[
TAOS SQL 边界限制
](
https://www.taosdata.com/cn/documentation/taos-sql#limitation
)
章节。
...
...
@@ -116,6 +114,17 @@ st,t1=3,t2=4,t3=t3 c1=3i64,c3="passit",c2=false,c4=4f64 1626006833639000000
在 SML_TELNET_PROTOCOL 和 SML_JSON_PROTOCOL 模式下,根据时间戳的长度来确定时间精度(与 OpenTSDB 标准操作方式相同),此时会忽略用户指定的时间分辨率。
**数据模式映射规则**
<br/>
本节将说明行协议的数据如何映射成为具有模式的数据。每个行协议中数据 measurement 映射为 超级表名称。tag_set 中的 标签名称为 数据模式中的标签名,field_set 中的名称为列名称。以如下数据为例,说明映射规则:
```
json
st,t
1
=
3
,t
2
=
4
,t
3
=t
3
c
1
=
3
i
64
,c
3
=
"passit"
,c
2
=
false
,c
4
=
4
f
64
1626006833639000000
```
该行数据映射生成一个超级表: st, 其包含了 3 个类型为 nchar 的标签,分别是:t1, t2, t3。五个数据列,分别是ts(timestamp),c1 (bigint),c3(binary),c2 (bool), c4 (bigint)。映射成为如下 SQL 语句:
```
json
create
stable
st
(_ts
timestamp,
c
1
bigint,
c
2
bool,
c
3
binary(
6
),
c
4
bigint)
tags(t
1
nchar(
1
),
t
2
nchar(
1
),
t
3
nchar(
2
))
```
**数据模式变更处理**
<br/>
本节将说明不同行数据写入情况下,对于数据模式的影响。
...
...
documentation20/cn/14.devops/03.immigrate/docs.md
浏览文件 @
2ad7f585
...
...
@@ -181,7 +181,7 @@ select count(*) from memory
完成查询后,如果写入的数据与预期的相比没有差别,同时写入程序本身没有异常的报错信息,那么可用确认数据写入是完整有效的。
TDengine不支持采用OpenTSDB的查询语法进行查询或数据获取处理,但是针对OpenTSDB的每种查询都提供对应的支持。
你可以用检查附件2
获取对应的查询处理的调整和应用使用的方式,如果需要全面了解TDengine支持的查询类型,请参阅TDengine的用户手册。
TDengine不支持采用OpenTSDB的查询语法进行查询或数据获取处理,但是针对OpenTSDB的每种查询都提供对应的支持。
可以用检查附录1
获取对应的查询处理的调整和应用使用的方式,如果需要全面了解TDengine支持的查询类型,请参阅TDengine的用户手册。
TDengine支持标准的JDBC 3.0接口操纵数据库,你也可以使用其他类型的高级语言的连接器来查询读取数据,以适配你的应用。具体的操作和使用帮助也请参阅用户手册。
...
...
src/connector/grafana-pluain-is-removed-from-TDengine.md
0 → 100644
浏览文件 @
2ad7f585
TDengine Grafana plugin is no more part of the TDengine repo. Please check it out from https://github.com/taosdata/grafanaplugin.
tests/pytest/query/queryLike.py
浏览文件 @
2ad7f585
...
...
@@ -92,13 +92,13 @@ class TDTestCase:
tdSql
.
query
(
"select * from st where tbname like 'tb_\_'"
)
tdSql
.
checkRows
(
1
)
tdSql
.
query
(
"select * from st where tbname like 'tb___'"
)
tdSql
.
checkRows
(
4
)
tdSql
.
query
(
"select * from st where tbname like 'tb_\__'"
)
tdSql
.
checkRows
(
3
)
tdSql
.
query
(
"select * from st where tbname like 'tb_\__'"
)
tdSql
.
checkRows
(
2
)
tdSql
.
query
(
"select * from st where tbname like 'tb_\_\_'"
)
tdSql
.
checkRows
(
1
)
tdSql
.
query
(
"select * from st where tbname like 'tb\__\_'"
)
tdSql
.
checkRows
(
1
)
tdSql
.
checkRows
(
2
)
tdSql
.
query
(
"select * from st where tbname like 'tb\__\__'"
)
tdSql
.
checkRows
(
2
)
tdSql
.
query
(
"select * from st where tbname like 'tb\__\_\_'"
)
...
...
@@ -116,9 +116,9 @@ class TDTestCase:
tdSql
.
query
(
"select * from st where name like 'tbname\__';"
)
tdSql
.
checkRows
(
3
)
tdSql
.
query
(
"select * from st where name like 'tbname___';"
)
tdSql
.
checkRows
(
4
)
tdSql
.
query
(
"select * from st where name like 'tbname_\__';"
)
tdSql
.
checkRows
(
3
)
tdSql
.
query
(
"select * from st where name like 'tbname_\__';"
)
tdSql
.
checkRows
(
2
)
tdSql
.
query
(
"select * from st where name like 'tbname_\_\_';"
)
tdSql
.
checkRows
(
1
)
tdSql
.
query
(
"select * from st where name like 'tbname\_\__';"
)
...
...
@@ -132,7 +132,8 @@ class TDTestCase:
tdSql
.
query
(
"select * from st where name like 'tbname\_\__\_';"
)
tdSql
.
checkRows
(
2
)
tdSql
.
query
(
"select name from st where name like 'tbname\_\_\__';"
)
tdSql
.
checkData
(
0
,
0
"tbname____"
)
tdSql
.
checkRows
(
1
)
tdSql
.
checkData
(
0
,
0
,
"tbname____"
)
# check escape about tags
tdSql
.
query
(
"select * from st where tagg like 'tag\_';"
)
...
...
@@ -142,9 +143,9 @@ class TDTestCase:
tdSql
.
query
(
"select * from st where tagg like 'tag\__';"
)
tdSql
.
checkRows
(
3
)
tdSql
.
query
(
"select * from st where tagg like 'tag___';"
)
tdSql
.
checkRows
(
4
)
tdSql
.
query
(
"select * from st where tagg like 'tag_\__';"
)
tdSql
.
checkRows
(
3
)
tdSql
.
query
(
"select * from st where tagg like 'tag_\__';"
)
tdSql
.
checkRows
(
2
)
tdSql
.
query
(
"select * from st where tagg like 'tag_\_\_';"
)
tdSql
.
checkRows
(
1
)
tdSql
.
query
(
"select * from st where tagg like 'tag\_\__';"
)
...
...
@@ -158,7 +159,7 @@ class TDTestCase:
tdSql
.
query
(
"select * from st where tagg like 'tag\_\__\_';"
)
tdSql
.
checkRows
(
2
)
tdSql
.
query
(
"select * from st where tagg like 'tag\_\__\_';"
)
tdSql
.
checkData
(
0
,
0
"tag__a_"
)
tdSql
.
checkData
(
0
,
0
,
"tag__a_"
)
os
.
system
(
"rm -rf ./*.py.sql"
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录