Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
d1b833c5
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看板
未验证
提交
d1b833c5
编写于
8月 22, 2022
作者:
H
Hui Li
提交者:
GitHub
8月 22, 2022
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #16267 from taosdata/feature/stream
docs(stream)
上级
41bc062d
8078642e
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
45 addition
and
11 deletion
+45
-11
docs/zh/12-taos-sql/14-stream.md
docs/zh/12-taos-sql/14-stream.md
+45
-11
docs/zh/12-taos-sql/watermark.webp
docs/zh/12-taos-sql/watermark.webp
+0
-0
未找到文件。
docs/zh/12-taos-sql/14-stream.md
浏览文件 @
d1b833c5
...
...
@@ -3,9 +3,6 @@ sidebar_label: 流式计算
title
:
流式计算
---
在时序数据的处理中,经常要对原始数据进行清洗、预处理,再使用时序数据库进行长久的储存。用户通常需要在时序数据库之外再搭建 Kafka、Flink、Spark 等流计算处理引擎,增加了用户的开发成本和维护成本。
使用 TDengine 3.0 的流式计算引擎能够最大限度的减少对这些额外中间件的依赖,真正将数据的写入、预处理、长期存储、复杂分析、实时计算、实时报警触发等功能融为一体,并且,所有这些任务只需要使用 SQL 完成,极大降低了用户的学习成本、使用成本。
## 创建流式计算
...
...
@@ -40,17 +37,27 @@ window_clause: {
其中,SESSION 是会话窗口,tol_val 是时间间隔的最大范围。在 tol_val 时间间隔范围内的数据都属于同一个窗口,如果连续的两条数据的时间超过 tol_val,则自动开启下一个窗口。
窗口的定义与时序数据特色查询中的定义完全相同。
例如,如下语句创建流式计算,同时自动创建名为 avg_vol 的超级表,此流计算以一分钟为时间窗口、30 秒为前向增量统计这些电表的平均电压,并将来自 meters 表的数据的计算结果写入 avg_vol 表,不同 partition 的数据会分别创建子表并写入不同子表。
```
sql
CREATE
STREAM
avg_vol_s
INTO
avg_vol
AS
SELECT
_wstartts
,
count
(
*
),
avg
(
voltage
)
FROM
meters
PARTITION
BY
tbname
INTERVAL
(
1
m
)
SLIDING
(
30
s
);
##
流式计算的
partition
可以使用
PARTITION
BY
TBNAME
或
PARTITION
BY
tag
,对一个流进行多分区的计算,每个分区的时间线与时间窗口是独立的,会各自聚合,并写入到目的表中的不同子表。
不带
PARTITION
BY
选项时,所有的数据将写入到一张子表。
流式计算创建的超级表有唯一的
tag
列
groupId
,每个
partition
会被分配唯一
groupId
。与
schemaless
写入一致,我们通过
MD5
计算子表名,并自动创建它。
```
## 删除流式计算
```
sql
DROP
STREAM
[
IF
NOT
EXISTS
]
stream_name
DROP
STREAM
[
IF
NOT
EXISTS
]
stream_name
;
```
仅删除流式计算任务,由流式计算写入的数据不会被删除。
...
...
@@ -61,6 +68,12 @@ DROP STREAM [IF NOT EXISTS] stream_name
SHOW
STREAMS
;
```
若要展示更详细的信息,可以使用:
```
sql
SELECT
*
from
performance_schema
.
`perf_streams`
;
```
## 流式计算的触发模式
在创建流时,可以通过 TRIGGER 指令指定流式计算的触发模式。
...
...
@@ -79,21 +92,42 @@ SHOW STREAMS;
MAX_DELAY 模式在窗口关闭时会立即触发计算。此外,当数据写入后,计算触发的时间超过 max delay 指定的时间,则立即触发计算
## 流式计算的
乱序数据容忍策略
## 流式计算的
窗口关闭
在创建流时,可以在 stream_option 中指定 watermark。
在创建流时,可以在 stream_option 中指定 watermark
,它定义了数据乱序的容忍上界
。
流式计算通过 watermark 来度量对乱序数据的容忍程度,watermark 默认为 0。
T = 最新事件时间 - watermark
每批到来的数据都会以上述公式更新窗口关闭时间,并将窗口结束时间 < T 的所有打开的窗口关闭,若触发模式为 WINDOW_CLOSE 或 MAX_DELAY,则推送窗口聚合结果。
每次写入的数据都会以上述公式更新窗口关闭时间,并将窗口结束时间 < T 的所有打开的窗口关闭,若触发模式为 WINDOW_CLOSE 或 MAX_DELAY,则推送窗口聚合结果。
![
TDengine 流式计算窗口关闭示意图
](
./watermark.webp
)
图中,纵轴表示不同时刻,对于不同时刻,我们画出其对应的 TDengine 收到的数据,即为横轴。
横轴上的数据点表示已经收到的数据,其中蓝色的点表示事件时间(即数据中的时间戳主键)最后的数据,该数据点减去定义的 watermark 时间,得到乱序容忍的上界 T。
所有结束时间小于 T 的窗口都将被关闭(图中以灰色方框标记)。
T2 时刻,乱序数据(黄色的点)到达 TDengine,由于有 watermark 的存在,这些数据进入的窗口并未被关闭,因此可以被正确处理。
T3 时刻,最新事件到达,T 向后推移超过了第二个窗口关闭的时间,该窗口被关闭,乱序数据被正确处理。
在 window_close 或 max_delay 模式下,窗口关闭直接影响推送结果。在 at_once 模式下,窗口关闭只与内存占用有关。
## 流式计算的过期数据处理策略
对于已关闭的窗口,再次落入该窗口中的数据被标记为过期数据.
TDengine 对于过期数据提供两种处理方式,由 IGNORE EXPIRED 选项指定:
流式计算的过期数据处理策略
对于已关闭的窗口,再次落入该窗口中的数据被标记为过期数据,对于过期数据,流式计算提供两种处理方式:
1.
重新计算,即 IGNORE EXPIRED 0:默认配置,从 TSDB 中重新查找对应窗口的所有数据并重新计算得到最新结果
1.
直接丢弃:这是常见流式计算引擎提供的默认(甚至是唯一)计算模式
2.
直接丢弃, 即 IGNORE EXPIRED 1:忽略过期数据
2.
重新计算:从 TSDB 中重新查找对应窗口的所有数据并重新计算得到最新结果
无论在哪种模式下,watermark 都应该被妥善设置,来得到正确结果(直接丢弃模式)或避免频繁触发重算带来的性能开销(重新计算模式)。
docs/zh/12-taos-sql/watermark.webp
0 → 100644
浏览文件 @
d1b833c5
文件已添加
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录