Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
7fa9bbe2
T
TDengine
项目概览
taosdata
/
TDengine
大约 2 年 前同步成功
通知
1192
Star
22018
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看板
未验证
提交
7fa9bbe2
编写于
3月 08, 2023
作者:
X
Xiaoyu Wang
提交者:
GitHub
3月 08, 2023
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #20323 from taosdata/docs/3.0_doc_wxy
docs: add event window
上级
3f3641f1
891ccdfe
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
27 addition
and
7 deletion
+27
-7
docs/zh/12-taos-sql/12-distinguished.md
docs/zh/12-taos-sql/12-distinguished.md
+27
-7
docs/zh/12-taos-sql/event_window.webp
docs/zh/12-taos-sql/event_window.webp
+0
-0
未找到文件。
docs/zh/12-taos-sql/12-distinguished.md
浏览文件 @
7fa9bbe2
...
@@ -31,15 +31,17 @@ select max(current) from meters partition by location interval(10m)
...
@@ -31,15 +31,17 @@ select max(current) from meters partition by location interval(10m)
## 窗口切分查询
## 窗口切分查询
TDengine 支持按时间窗口切分方式进行聚合结果查询,比如温度传感器每秒采集一次数据,但需查询每隔 10 分钟的温度平均值。这种场景下可以使用窗口子句来获得需要的查询结果。窗口子句用于针对查询的数据集合按照窗口切分成为查询子集并进行聚合,窗口包含时间窗口(time window)、状态窗口(status window)、会话窗口(session window)三种窗口。其中时间窗口又可划分为滑动时间窗口和翻转时间窗口。窗口切分查询语法如下:
TDengine 支持按时间窗口切分方式进行聚合结果查询,比如温度传感器每秒采集一次数据,但需查询每隔 10 分钟的温度平均值。这种场景下可以使用窗口子句来获得需要的查询结果。窗口子句用于针对查询的数据集合按照窗口切分成为查询子集并进行聚合,窗口包含时间窗口(time window)、状态窗口(status window)、会话窗口(session window)三种窗口。其中时间窗口又可划分为滑动时间窗口和翻转时间窗口。
窗口子句语法如下:
```
sql
```
sql
SELECT
select_list
FROM
tb_name
window_clause
:
{
[
WHERE
where_condition
]
SESSION
(
ts_col
,
tol_val
)
[
SESSION
(
ts_col
,
tol_val
)]
|
STATE_WINDOW
(
col
)
[
STATE_WINDOW
(
co
l
)]
|
INTERVAL
(
interval_val
[,
interval_offset
])
[
SLIDING
(
sliding_val
)]
[
FILL
(
fill_mod_and_va
l
)]
[
INTERVAL
(
interval
[,
offset
])
[
SLIDING
sliding
]]
|
EVENT_WINDOW
START
WITH
start_trigger_condition
END
WITH
end_trigger_condition
[
FILL
(
{
NONE
|
VALUE
|
PREV
|
NULL
|
LINEAR
|
NEXT
}
)]
}
```
```
在上述语法中的具体限制如下
在上述语法中的具体限制如下
...
@@ -138,6 +140,24 @@ SELECT tbname, _wstart, CASE WHEN voltage >= 205 and voltage <= 235 THEN 1 ELSE
...
@@ -138,6 +140,24 @@ SELECT tbname, _wstart, CASE WHEN voltage >= 205 and voltage <= 235 THEN 1 ELSE
SELECT COUNT(*), FIRST(ts) FROM temp_tb_1 SESSION(ts, tol_val);
SELECT COUNT(*), FIRST(ts) FROM temp_tb_1 SESSION(ts, tol_val);
```
```
### 事件窗口
事件窗口根据开始条件和结束条件来划定窗口,当start_trigger_condition满足时则窗口开始,直到end_trigger_condition满足时窗口关闭。start_trigger_condition和end_trigger_condition可以是任意 TDengine 支持的条件表达式,且可以包含不同的列。
事件窗口可以仅包含一条数据。即当一条数据同时满足start_trigger_condition和end_trigger_condition,且当前不在一个窗口内时,这条数据自己构成了一个窗口。
事件窗口无法关闭时,不构成一个窗口,不会被输出。即有数据满足start_trigger_condition,此时窗口打开,但后续数据都不能满足end_trigger_condition,这个窗口无法被关闭,这部分数据不够成一个窗口,不会被输出。
如果直接在超级表上进行事件窗口查询,TDengine 会将超级表的数据汇总成一条时间线,然后进行事件窗口的计算。
如果需要对子查询的结果集进行事件窗口查询,那么子查询的结果集需要满足按时间线输出的要求,且可以输出有效的时间戳列。
以下面的 SQL 语句为例,事件窗口切分如图所示:
```
sql
select
_wstart
,
_wend
,
count
(
*
)
from
t
start
with
c1
>
0
end
with
c2
<
10
```

### 时间戳伪列
### 时间戳伪列
窗口聚合查询结果中,如果 SQL 语句中没有指定输出查询结果中的时间戳列,那么最终结果中不会自动包含窗口的时间列信息。如果需要在结果中输出聚合结果所对应的时间窗口信息,需要在 SELECT 子句中使用时间戳相关的伪列: 时间窗口起始时间 (
\_
WSTART), 时间窗口结束时间 (
\_
WEND), 时间窗口持续时间 (
\_
WDURATION), 以及查询整体窗口相关的伪列: 查询窗口起始时间(
\_
QSTART) 和查询窗口结束时间(
\_
QEND)。需要注意的是时间窗口起始时间和结束时间均是闭区间,时间窗口持续时间是数据当前时间分辨率下的数值。例如,如果当前数据库的时间分辨率是毫秒,那么结果中 500 就表示当前时间窗口的持续时间是 500毫秒 (500 ms)。
窗口聚合查询结果中,如果 SQL 语句中没有指定输出查询结果中的时间戳列,那么最终结果中不会自动包含窗口的时间列信息。如果需要在结果中输出聚合结果所对应的时间窗口信息,需要在 SELECT 子句中使用时间戳相关的伪列: 时间窗口起始时间 (
\_
WSTART), 时间窗口结束时间 (
\_
WEND), 时间窗口持续时间 (
\_
WDURATION), 以及查询整体窗口相关的伪列: 查询窗口起始时间(
\_
QSTART) 和查询窗口结束时间(
\_
QEND)。需要注意的是时间窗口起始时间和结束时间均是闭区间,时间窗口持续时间是数据当前时间分辨率下的数值。例如,如果当前数据库的时间分辨率是毫秒,那么结果中 500 就表示当前时间窗口的持续时间是 500毫秒 (500 ms)。
...
...
docs/zh/12-taos-sql/event_window.webp
0 → 100644
浏览文件 @
7fa9bbe2
文件已添加
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录