Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
3574abcc
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看板
未验证
提交
3574abcc
编写于
8月 29, 2022
作者:
X
Xiaoyu Wang
提交者:
GitHub
8月 29, 2022
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Update 12-distinguished.md
上级
cde4621e
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
16 addition
and
19 deletion
+16
-19
docs/zh/12-taos-sql/12-distinguished.md
docs/zh/12-taos-sql/12-distinguished.md
+16
-19
未找到文件。
docs/zh/12-taos-sql/12-distinguished.md
浏览文件 @
3574abcc
...
...
@@ -6,11 +6,11 @@ description: TDengine 提供的时序数据特有的查询功能
TDengine 是专为时序数据而研发的大数据平台,存储和计算都针对时序数据的特定进行了量身定制,在支持标准 SQL 的基础之上,还提供了一系列贴合时序业务场景的特色查询语法,极大的方便时序场景的应用开发。
TDengine 提供的特色查询包括
标签
切分查询和窗口切分查询。
TDengine 提供的特色查询包括
数据
切分查询和窗口切分查询。
##
标签
切分查询
##
数据
切分查询
超级表查询中,当需要针对标签进行数据切分然后在切分出的数据空间内再进行一系列的计算时使用标签切分子句,标签切分的语句
如下:
当需要按一定的维度对数据进行切分然后在切分出的数据空间内再进行一系列的计算时使用数据切分子句,数据切分语句的语法
如下:
```
sql
PARTITION
BY
part_list
...
...
@@ -18,22 +18,23 @@ PARTITION BY part_list
part_list 可以是任意的标量表达式,包括列、常量、标量函数和它们的组合。
当 PARTITION BY 和标签一起使用时,TDengine 按如下方式处理标签
切分子句:
TDengine 按如下方式处理数据
切分子句:
-
标签切分子句位于 WHERE 子句之后,且不能和 JOIN 子句一起使用
。
-
标签切分子句将超级表数据按指定的标签组合
进行切分,每个切分的分片进行指定的计算。计算由之后的子句定义(窗口子句、GROUP BY 子句或 SELECT 子句)。
-
标签
切分子句可以和窗口切分子句(或 GROUP BY 子句)一起使用,此时后面的子句作用在每个切分的分片上。例如,将数据按标签 location 进行分组,并对每个组按 10 分钟进行降采样,取其最大值。
-
数据切分子句位于 WHERE 子句之后
。
-
数据切分子句将表数据按指定的维度
进行切分,每个切分的分片进行指定的计算。计算由之后的子句定义(窗口子句、GROUP BY 子句或 SELECT 子句)。
-
数据
切分子句可以和窗口切分子句(或 GROUP BY 子句)一起使用,此时后面的子句作用在每个切分的分片上。例如,将数据按标签 location 进行分组,并对每个组按 10 分钟进行降采样,取其最大值。
```
sql
select
max
(
current
)
from
meters
partition
by
location
interval
(
10
m
)
```
数据切分子句最常见的用法就是在超级表查询中,按标签将子表数据进行切分,然后分别进行计算。特别是 PARTITION BY TBNAME 用法,它将每个子表的数据独立出来,形成一条条独立的时间序列,极大的方便了各种时序场景的统计分析。
## 窗口切分查询
TDengine 支持按时间段窗口切分方式进行聚合结果查询,比如温度传感器每秒采集一次数据,但需查询每隔 10 分钟的温度平均值。这种场景下可以使用窗口子句来获得需要的查询结果。窗口子句用于针对查询的数据集合按照窗口切分成为查询子集并进行聚合,窗口包含时间窗口(time window)、状态窗口(status window)、会话窗口(session window)三种窗口。其中时间窗口又可划分为滑动时间窗口和翻转时间窗口。窗口切分查询语法如下:
```
sql
SELECT
function
_list
FROM
tb_name
SELECT
select
_list
FROM
tb_name
[
WHERE
where_condition
]
[
SESSION
(
ts_col
,
tol_val
)]
[
STATE_WINDOW
(
col
)]
...
...
@@ -43,19 +44,15 @@ SELECT function_list FROM tb_name
在上述语法中的具体限制如下
### 窗口切分查询中使用函数的限制
-
在聚合查询中,function_list 位置允许使用聚合和选择函数,并要求每个函数仅输出单个结果(例如:COUNT、AVG、SUM、STDDEV、LEASTSQUARES、PERCENTILE、MIN、MAX、FIRST、LAST),而不能使用具有多行输出结果的函数(例如:DIFF 以及四则运算)。
-
此外 LAST_ROW 查询也不能与窗口聚合同时出现。
-
标量函数(如:CEIL/FLOOR 等)也不能使用在窗口聚合查询中。
### 窗口子句的规则
-
窗口子句位于
标签
切分子句之后,GROUP BY 子句之前,且不可以和 GROUP BY 子句一起使用。
-
窗口子句位于
数据
切分子句之后,GROUP BY 子句之前,且不可以和 GROUP BY 子句一起使用。
-
窗口子句将数据按窗口进行切分,对每个窗口进行 SELECT 列表中的表达式的计算,SELECT 列表中的表达式只能包含:
-
常量。
-
聚集函数。
-
_wstart伪列、_wend伪列和_wduration伪列。
-
聚集函数(包括选择函数和可以由参数确定输出行数的时序特有函数)。
-
包含上面表达式的表达式。
-
且至少包含一个聚集函数。
-
窗口子句不可以和 GROUP BY 子句一起使用。
-
WHERE 语句可以指定查询的起止时间和其他过滤条件。
...
...
@@ -74,7 +71,7 @@ FILL 语句指定某一窗口区间数据缺失的情况下的填充模式。填
1.
使用 FILL 语句的时候可能生成大量的填充输出,务必指定查询的时间区间。针对每次查询,系统可返回不超过 1 千万条具有插值的结果。
2.
在时间维度聚合中,返回的结果中时间序列严格单调递增。
3.
如果查询对象是超级表,则聚合函数会作用于该超级表下满足值过滤条件的所有表的数据。如果查询中没有使用
GROUP BY 语句,则返回的结果按照时间序列严格单调递增;如果查询中使用了 GROUP BY 语句分组,则返回结果中每个 GROUP
内不按照时间序列严格单调递增。
3.
如果查询对象是超级表,则聚合函数会作用于该超级表下满足值过滤条件的所有表的数据。如果查询中没有使用
PARTITION BY 语句,则返回的结果按照时间序列严格单调递增;如果查询中使用了 PARTITION BY 语句分组,则返回结果中每个 PARTITION
内不按照时间序列严格单调递增。
:::
...
...
@@ -106,7 +103,7 @@ SELECT COUNT(*) FROM temp_tb_1 INTERVAL(1m) SLIDING(2m);
### 状态窗口
使用整数(布尔值)或字符串来标识产生记录时候设备的状态量。产生的记录如果具有相同的状态量数值则归属于同一个状态窗口,数值改变后该窗口关闭。如下图所示,根据状态量确定的状态窗口分别是[2019-04-28 14:22:07,2019-04-28 14:22:10]和[2019-04-28 14:22:11,2019-04-28 14:22:12]两个。
(状态窗口暂不支持对超级表使用)
使用整数(布尔值)或字符串来标识产生记录时候设备的状态量。产生的记录如果具有相同的状态量数值则归属于同一个状态窗口,数值改变后该窗口关闭。如下图所示,根据状态量确定的状态窗口分别是[2019-04-28 14:22:07,2019-04-28 14:22:10]和[2019-04-28 14:22:11,2019-04-28 14:22:12]两个。
![
TDengine Database 时间窗口示意图
](
./timewindow-3.webp
)
...
...
@@ -122,7 +119,7 @@ SELECT COUNT(*), FIRST(ts), status FROM temp_tb_1 STATE_WINDOW(status);
![
TDengine Database 时间窗口示意图
](
./timewindow-2.webp
)
在 tol_value 时间间隔范围内的结果都认为归属于同一个窗口,如果连续的两条记录的时间超过 tol_val,则自动开启下一个窗口。
(会话窗口暂不支持对超级表使用)
在 tol_value 时间间隔范围内的结果都认为归属于同一个窗口,如果连续的两条记录的时间超过 tol_val,则自动开启下一个窗口。
```
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录