@ -30,11 +30,11 @@ subquery: SELECT select_list
window_clause
window_clause
```
```
支持会话窗口、状态窗口、滑动窗口、事件窗口和计数窗口, 其中, 状态窗口、事件窗口和计数窗口搭配超级表时必须与partition by tbname一起使用。对于数据源表是复合主键的流, 不支持状态窗口、事件窗口、计数窗口的计算。
支持会话窗口、状态窗口、滑动窗口、事件窗口和计数窗口。 其中,状态窗口、事件窗口和计数窗口搭配超级表时必须与 partition by tbname 一起使用。对于数据源表是复合主键的流,不支持状态窗口、事件窗口、计数窗口的计算。
stb_name 是保存计算结果的超级表的表名, 如果该超级表不存在, 会自动创建; 如果已存在, 则检查列的schema信息。详见 写入已存在的超级表。
stb_name 是保存计算结果的超级表的表名, 如果该超级表不存在, 会自动创建; 如果已存在, 则检查列的schema信息。详见 [ 写入已存在的超级表](#写入已存在的超级表 ) 。
TAGS 子句定义了流计算中创建TAG的规则, 可以为每个partition对应的子表生成自定义的TAG值, 详见 自定义TAG
TAGS 子句定义了流计算中创建TAG的规则, 可以为每个 partition 对应的子表生成自定义的TAG值, 详见 [ 自定义 TAG](#自定义 TAG )
```sql
```sql
create_definition:
create_definition:
col_name column_definition
col_name column_definition
@ -42,7 +42,7 @@ column_definition:
type_name [COMMENT 'string_value']
type_name [COMMENT 'string_value']
```
```
subtable 子句定义了流式计算中创建的子表的命名规则,详见 流式计算的 partition 部分 。
subtable 子句定义了流式计算中创建的子表的命名规则,详见 [流式计算的 partition ](#流式计算的 partition ) 。
```sql
```sql
window_clause: {
window_clause: {
@ -54,15 +54,17 @@ window_clause: {
}
}
```
```
其中, SESSION 是会话窗口, tol_val 是时间间隔的最大范围。在 tol_val 时间间隔范围内的数据都属于同一个窗口,如果连续的两条数据的时间超过 tol_val, 则自动开启下一个窗口。该窗口的 _wend 等于最后一条数据的时间加上 tol_val。
其中:
STATE_WINDOW 是状态窗口, col 用来标识状态量, 相同的状态量数值则归属于同一个状态窗口, col 数值改变后则当前窗口结束,自动开启下一个窗口 。
- SESSION 是会话窗口, tol_val 是时间间隔的最大范围。在 tol_val 时间间隔范围内的数据都属于同一个窗口,如果连续的两条数据的时间超过 tol_val, 则自动开启下一个窗口。该窗口的 _wend 等于最后一条数据的时间加上 tol_val 。
INTERVAL 是时间窗口, 又可分为滑动时间窗口和翻转时间窗口。INTERVAL 子句用于指定窗口相等时间周期, SLIDING 字句用于指定窗口向前滑动的时间。当 interval_val 与 sliding_val 相等的时候, 时间窗口即为翻转时间窗口, 否则为滑动时间窗口, 注意: sliding_val 必须小于等于 interval_val 。
- STATE_WINDOW 是状态窗口, col 用来标识状态量, 相同的状态量数值则归属于同一个状态窗口, col 数值改变后则当前窗口结束,自动开启下一个窗口 。
EVENT_WINDOW 是事件窗口,根据开始条件和结束条件来划定窗口。当 start_trigger_condition 满足时则窗口开始,直到 end_trigger_condition 满足时窗口关闭。 start_trigger_condition 和 end_trigger_condition 可以是任意 TDengine 支持的条件表达式,且可以包含不同的列 。
- INTERVAL 是时间窗口, 又可分为滑动时间窗口和翻转时间窗口。INTERVAL 子句用于指定窗口相等时间周期, SLIDING 字句用于指定窗口向前滑动的时间。当 interval_val 与 sliding_val 相等的时候, 时间窗口即为翻转时间窗口, 否则为滑动时间窗口, 注意: sliding_val 必须小于等于 interval_val 。
COUNT_WINDOW 是计数窗口,按固定的数据行数来划分窗口。 count_val 是常量, 是正整数, 必须大于等于2, 小于2147483648。 count_val 表示每个 COUNT_WINDOW 包含的最大数据行数,总数据行数不能整除 count_val 时,最后一个窗口的行数会小于 count_val 。 sliding_val 是常量,表示窗口滑动的数量,类似于 INTERVAL 的 SLIDING 。
- EVENT_WINDOW 是事件窗口,根据开始条件和结束条件来划定窗口。当 start_trigger_condition 满足时则窗口开始,直到 end_trigger_condition 满足时窗口关闭。 start_trigger_condition 和 end_trigger_condition 可以是任意 TDengine 支持的条件表达式,且可以包含不同的列。
- COUNT_WINDOW 是计数窗口,按固定的数据行数来划分窗口。 count_val 是常量, 是正整数, 必须大于等于2, 小于2147483648。 count_val 表示每个 COUNT_WINDOW 包含的最大数据行数,总数据行数不能整除 count_val 时,最后一个窗口的行数会小于 count_val 。 sliding_val 是常量,表示窗口滑动的数量,类似于 INTERVAL 的 SLIDING 。
窗口的定义与时序数据特色查询中的定义完全相同,详见 [TDengine 特色查询 ](../distinguished )
窗口的定义与时序数据特色查询中的定义完全相同,详见 [TDengine 特色查询 ](../distinguished )
@ -83,7 +85,7 @@ CREATE STREAM streams1 IGNORE EXPIRED 1 WATERMARK 100s INTO streamt1 AS
SELECT _wstart, count(*), avg(voltage) from meters PARTITION BY tbname COUNT_WINDOW(10);
SELECT _wstart, count(*), avg(voltage) from meters PARTITION BY tbname COUNT_WINDOW(10);
```
```
notification_definition 子句定义了窗口计算过程中,在窗口打开/关闭等指定事件发生时,需要向哪些地址发送通知。详见 [流式计算的事件通知 ](#流 失 计算的事件通知)
notification_definition 子句定义了窗口计算过程中,在窗口打开/关闭等指定事件发生时,需要向哪些地址发送通知。详见 [流式计算的事件通知 ](#流 式 计算的事件通知)
## 流式计算的 partition
## 流式计算的 partition
@ -99,7 +101,7 @@ notification_definition 子句定义了窗口计算过程中,在窗口打开/
CREATE STREAM avg_vol_s INTO avg_vol SUBTABLE(CONCAT('new-', tname)) AS SELECT _wstart, count(*), avg(voltage) FROM meters PARTITION BY tbname tname INTERVAL(1m);
CREATE STREAM avg_vol_s INTO avg_vol SUBTABLE(CONCAT('new-', tname)) AS SELECT _wstart, count(*), avg(voltage) FROM meters PARTITION BY tbname tname INTERVAL(1m);
```
```
PARTITION 子句中,为 tbname 定义了一个别名 tname, 在PARTITION 子句中的别名可以用于 SUBTABLE 子句中的表达式计算,在上述示例中,流新创建的子表将以前缀 'new-' 连接原表名作为表名(从3.2.3.0 开始,为了避免 SUBTABLE 中的表达式无法区分各个子表,即误将多个相同时间线写入一个子表,在指定的子表名后面加上 _stableName_groupId) 。
PARTITION 子句中,为 tbname 定义了一个别名 tname, 在 PARTITION 子句中的别名可以用于 SUBTABLE 子句中的表达式计算,在上述示例中,流新创建的子表将以前缀 'new-' 连接原表名作为表名(从 3.2.3.0 版本 开始,为了避免 SUBTABLE 中的表达式无法区分各个子表,即误将多个相同时间线写入一个子表,在指定的子表名后面加上 _stableName_groupId) 。
注意,子表名的长度若超过 TDengine 的限制,将被截断。若要生成的子表名已经存在于另一超级表,由于 TDengine 的子表名是唯一的,因此对应新子表的创建以及数据的写入将会失败。
注意,子表名的长度若超过 TDengine 的限制,将被截断。若要生成的子表名已经存在于另一超级表,由于 TDengine 的子表名是唯一的,因此对应新子表的创建以及数据的写入将会失败。
@ -232,7 +234,7 @@ TDengine 对于修改数据提供两种处理方式,由 IGNORE UPDATE 选项
CREATE STREAM streams2 trigger at_once INTO st1 TAGS(cc varchar(100)) as select _wstart, count(*) c1 from st partition by concat("tag-", tbname) as cc interval(10s));
CREATE STREAM streams2 trigger at_once INTO st1 TAGS(cc varchar(100)) as select _wstart, count(*) c1 from st partition by concat("tag-", tbname) as cc interval(10s));
```
```
PARTITION 子句中,为 concat("tag-", tbname)定义了一个别名cc, 对应超级表st1的自定义TAG 的名字。在上述示例中, 流新创建的子表的TAG将以前缀 'new-' 连接原表名作为TAG的值。
PARTITION 子句中,为 concat("tag-", tbname) 定义了一个别名 cc, 对应超级表 st1 的自定义 TAG 的名字。在上述示例中,流新创建的子表的 TAG 将以前缀 'new-' 连接原表名作为 TAG 的值。
会对TAG信息进行如下检查
会对TAG信息进行如下检查
1. 检查 tag 的 schema 信息是否匹配,对于不匹配的,则自动进行数据类型转换,当前只有数据长度大于 4096byte 时才报错,其余场景都能进行类型转换。
1. 检查 tag 的 schema 信息是否匹配,对于不匹配的,则自动进行数据类型转换,当前只有数据长度大于 4096byte 时才报错,其余场景都能进行类型转换。
@ -274,14 +276,14 @@ T = 最新事件时间 - DELETE_MARK
## 暂停、恢复流计算
## 暂停、恢复流计算
1.流计算暂停计算任务
1.流计算暂停计算任务
PAUSE STREAM [IF EXISTS] stream_name;
PAUSE STREAM [IF EXISTS] stream_name;
没有指定IF EXISTS, 如果该stream不存在, 则报错; 如果存在, 则暂停流计算。指定了IF EXISTS, 如果该stream不存在, 则返回成功; 如果存在, 则暂停流计算
没有指定 IF EXISTS, 如果该 stream 不存在,则报错;如果存在,则暂停流计算。指定了 IF EXISTS, 如果该 stream 不存在,则返回成功;如果存在,则暂停流计算。
2.流计算恢复计算任务
2.流计算恢复计算任务
RESUME STREAM [IF EXISTS] [IGNORE UNTREATED] stream_name;
RESUME STREAM [IF EXISTS] [IGNORE UNTREATED] stream_name;
没有指定 IF EXISTS, 如果该 stream 不存在,则报错,如果存在,则恢复流计算;指定了 IF EXISTS, 如果 stream 不存在,则返回成功;如果存在,则恢复流计算。如果指定 IGNORE UNTREATED, 则恢复流计算时, 忽略流计算暂停期间写入的数据。
没有指定 IF EXISTS, 如果该 stream 不存在,则报错,如果存在,则恢复流计算;指定了 IF EXISTS, 如果 stream 不存在,则返回成功;如果存在,则恢复流计算。如果指定 IGNORE UNTREATED, 则恢复流计算时, 忽略流计算暂停期间写入的数据。
## 状态数据备份与同步
## 状态数据备份与同步
流计算的中间结果成为计算的状态数据,需要在流计算整个生命周期中进行持久化保存。为了确保流计算中间状态能够在集群环境下在不同的节点间可靠地同步和迁移,至 3.3.2.1 版本开始,需要在运行环境中部署 rsync 软件,还需要增加以下的步骤:
流计算的中间结果成为计算的状态数据,需要在流计算整个生命周期中进行持久化保存。为了确保流计算中间状态能够在集群环境下在不同的节点间可靠地同步和迁移,从 3.3.2.1 版本开始,需要在运行环境中部署 rsync 软件,还需要增加以下的步骤:
1. 在配置文件中配置 snode 的地址( IP + 端口)和状态数据备份目录(该目录系 snode 所在的物理节点的目录)。
1. 在配置文件中配置 snode 的地址( IP + 端口)和状态数据备份目录(该目录系 snode 所在的物理节点的目录)。
2. 然后创建 snode。
2. 然后创建 snode。
完成上述两个步骤以后才能创建流。
完成上述两个步骤以后才能创建流。
@ -304,7 +306,7 @@ CREATE SNODE ON DNODE [id]
### 使用说明
### 使用说明
流式计算支持在窗口打开/关闭时,向外部系统发送相关的事件通知。用户通过 notification_definition 来指定需要通知的事件,以及用于接收通知消息的目标地址。
流式计算支持在窗口打开/关闭时,向外部系统发送相关的事件通知。用户通过 ` notification_definition` 来指定需要通知的事件,以及用于接收通知消息的目标地址。
```sql
```sql
notification_definition:
notification_definition:
@ -321,14 +323,14 @@ notification_options: {
```
```
上述语法中的相关规则含义如下:
上述语法中的相关规则含义如下:
1. `url` : 指定通知的目标地址, 必须包括协议、IP 或域名、端口号,并允许包含路径、参数。目前仅支持 websocket 协议。例如:'ws://localhost:8080', 'ws://localhost:8080/notify', 'wss://localhost:8080/notify?key=foo' 。
1. `url` : 指定通知的目标地址, 必须包括协议、IP 或域名、端口号,并允许包含路径、参数。目前仅支持 websocket 协议。例如:`ws://localhost:8080`、`ws://localhost:8080/notify`、`wss://localhost:8080/notify?key=foo` 。
1. `event_type` : 定义需要通知的事件,支持的事件类型有:
1. `event_type` :定义需要通知的事件,支持的事件类型有:
1. ' WINDOW_OPEN' :窗口打开事件,所有类型的窗口打开时都会触发
1. WINDOW_OPEN: 窗口打开事件, 所有类型的窗口打开时都会触发。
1. ' WINDOW_CLOSE' :窗口关闭事件,所有类型的窗口关闭时都会触发
1. WINDOW_CLOSE: 窗口关闭事件, 所有类型的窗口关闭时都会触发。
1. `NOTIFY_HISTORY` : 控制是否在计算历史数据时触发通知, 默认值为0, 即不触发
1. `NOTIFY_HISTORY` : 控制是否在计算历史数据时触发通知,默认值为 0, 即不触发。
1. `ON_FAILURE` : 向通知地址发送通知失败时(比如网络不佳场景)是否允许丢弃部分事件,默认值为 `PAUSE`
1. `ON_FAILURE` : 向通知地址发送通知失败时(比如网络不佳场景)是否允许丢弃部分事件,默认值为 `PAUSE` 。
1. PAUSE 表示发送通知失败时暂停流计算任务。taosd 会重试发送通知,直到发送成功后,任务自动恢复运行。
1. PAUSE 表示发送通知失败时暂停流计算任务。taosd 会重试发送通知,直到发送成功后,任务自动恢复运行。
1. DROP 表示发送通知失败时直接丢弃事件信息,流计算任务继续运行,不受影响
1. DROP 表示发送通知失败时直接丢弃事件信息,流计算任务继续运行,不受影响。
比如,以下示例创建一个流,计算电表电流的每分钟平均值,并在窗口打开、关闭时向两个通知地址发送通知,计算历史数据时不发送通知,不允许在通知发送失败时丢弃通知:
比如,以下示例创建一个流,计算电表电流的每分钟平均值,并在窗口打开、关闭时向两个通知地址发送通知,计算历史数据时不发送通知,不允许在通知发送失败时丢弃通知:
@ -432,89 +434,89 @@ CREATE STREAM avg_current_stream FILL_HISTORY 1
### 根级字段说明
### 根级字段说明
1. "messageId": 字符串类型,是通知消息的唯一标识符,确保整条消息可以被追踪和去重。
1. messageId: 字符串类型,是通知消息的唯一标识符,确保整条消息可以被追踪和去重。
1. "timestamp": 长整型时间戳,表示通知消息生成的时间,精确到毫秒,即: '00:00, Jan 1 1970 UTC' 以来的毫秒数。
1. timestamp: 长整型时间戳,表示通知消息生成的时间,精确到毫秒,即: '00:00, Jan 1 1970 UTC' 以来的毫秒数。
1. "streams": 对象数组,包含多个流任务的事件信息。(详细信息见下节)
1. streams: 对象数组,包含多个流任务的事件信息。(详细信息见下节)
### stream 对象的字段说明
### stream 对象的字段说明
1. "streamName": 字符串类型,流任务的名称,用于标识事件所属的流。
1. streamName: 字符串类型,流任务的名称,用于标识事件所属的流。
1. "events": 对象数组,该流任务下的事件列表,包含一个或多个事件对象。(详细信息见下节)
1. events: 对象数组,该流任务下的事件列表,包含一个或多个事件对象。(详细信息见下节)
### event 对象的字段说明
### event 对象的字段说明
#### 通用字段
#### 通用字段
这部分是所有 event 对象所共有的字段。
这部分是所有 event 对象所共有的字段。
1. "tableName": 字符串类型,是对应目标子表的表名。
1. tableName: 字符串类型,是对应目标子表的表名。
1. "eventType": 字符串类型,表示事件类型 ("WINDOW_OPEN", "WINDOW_CLOSE" 或 "WINDOW_INVALIDATION") 。
1. eventType: 字符串类型, 表示事件类型, 支持 WINDOW_OPEN、WINDOW_CLOSE、WINDOW_INVALIDATION 三种类型 。
1. "eventTime": 长整型时间戳,表示事件生成时间,精确到毫秒,即: '00:00, Jan 1 1970 UTC' 以来的毫秒数。
1. eventTime: 长整型时间戳, 表示事件生成时间, 精确到毫秒, 即: '00:00, Jan 1 1970 UTC' 以来的毫秒数。
1. "windowId": 字符串类型,窗口的唯一标识符,确保打开和关闭事件的 ID 一致,便于外部系统将两者关联。如果 taosd 发生故障重启,部分事件可能会重复发送,会保证同一窗口的 windowId 保持不变。
1. windowId: 字符串类型,窗口的唯一标识符,确保打开和关闭事件的 ID 一致,便于外部系统将两者关联。如果 taosd 发生故障重启,部分事件可能会重复发送,会保证同一窗口的 windowId 保持不变。
1. "windowType": 字符串类型,表示窗口类型 ("Time", "State", "Session", "Event", "Count") 。
1. windowType: 字符串类型, 表示窗口类型, 支持 Time、State、Session、Event、Count 五种类型 。
#### 时间窗口相关字段
#### 时间窗口相关字段
这部分是 "windowType" 为"Time" 时 event 对象才有的字段。
这部分是 windowType 为 Time 时 event 对象才有的字段。
1. 如果 " eventType" 为 " WINDOW_OPEN" ,则包含如下字段:
1. 如果 eventType 为 WINDOW_OPEN, 则包含如下字段:
1. "windowStart": 长整型时间戳,表示窗口的开始时间,精度与结果表的时间精度一致。
1. windowStart: 长整型时间戳,表示窗口的开始时间,精度与结果表的时间精度一致。
1. 如果 " eventType" 为 " WINDOW_CLOSE" ,则包含如下字段:
1. 如果 eventType 为 WINDOW_CLOSE, 则包含如下字段:
1. "windowStart": 长整型时间戳,表示窗口的开始时间,精度与结果表的时间精度一致。
1. windowStart: 长整型时间戳,表示窗口的开始时间,精度与结果表的时间精度一致。
1. "windowEnd": 长整型时间戳,表示窗口的结束时间,精度与结果表的时间精度一致。
1. windowEnd: 长整型时间戳,表示窗口的结束时间,精度与结果表的时间精度一致。
1. "result": 计算结果,为键值对形式,包含窗口计算的结果列列名及其对应的值。
1. result: 计算结果,为键值对形式,包含窗口计算的结果列列名及其对应的值。
#### 状态窗口相关字段
#### 状态窗口相关字段
这部分是 "windowType" 为"State" 时 event 对象才有的字段。
这部分是 windowType 为 State 时 event 对象才有的字段。
1. 如果 " eventType" 为 " WINDOW_OPEN" ,则包含如下字段:
1. 如果 eventType 为 WINDOW_OPEN, 则包含如下字段:
1. "windowStart": 长整型时间戳,表示窗口的开始时间,精度与结果表的时间精度一致。
1. windowStart: 长整型时间戳,表示窗口的开始时间,精度与结果表的时间精度一致。
1. "prevState": 与状态列的类型相同,表示上一个窗口的状态值。如果没有上一个窗口(即: 现在是第一个窗口),则为 NULL。
1. prevState: 与状态列的类型相同, 表示上一个窗口的状态值。如果没有上一个窗口(即: 现在是第一个窗口),则为 NULL。
1. "curState": 与状态列的类型相同,表示当前窗口的状态值。
1. curState: 与状态列的类型相同,表示当前窗口的状态值。
1. 如果 " eventType" 为 " WINDOW_CLOSE" ,则包含如下字段:
1. 如果 eventType 为 WINDOW_CLOSE, 则包含如下字段:
1. "windowStart": 长整型时间戳,表示窗口的开始时间,精度与结果表的时间精度一致。
1. windowStart: 长整型时间戳,表示窗口的开始时间,精度与结果表的时间精度一致。
1. "windowEnd": 长整型时间戳,表示窗口的结束时间,精度与结果表的时间精度一致。
1. windowEnd: 长整型时间戳,表示窗口的结束时间,精度与结果表的时间精度一致。
1. "curState": 与状态列的类型相同,表示当前窗口的状态值。
1. curState: 与状态列的类型相同,表示当前窗口的状态值。
1. "nextState": 与状态列的类型相同,表示下一个窗口的状态值。
1. nextState: 与状态列的类型相同,表示下一个窗口的状态值。
1. "result": 计算结果,为键值对形式,包含窗口计算的结果列列名及其对应的值。
1. result: 计算结果,为键值对形式,包含窗口计算的结果列列名及其对应的值。
#### 会话窗口相关字段
#### 会话窗口相关字段
这部分是 "windowType" 为"Session" 时 event 对象才有的字段。
这部分是 windowType 为 Session 时 event 对象才有的字段。
1. 如果 " eventType" 为 " WINDOW_OPEN" ,则包含如下字段:
1. 如果 eventType 为 WINDOW_OPEN, 则包含如下字段:
1. "windowStart": 长整型时间戳,表示窗口的开始时间,精度与结果表的时间精度一致。
1. windowStart: 长整型时间戳,表示窗口的开始时间,精度与结果表的时间精度一致。
1. 如果 " eventType" 为 " WINDOW_CLOSE" ,则包含如下字段:
1. 如果 eventType 为 WINDOW_CLOSE, 则包含如下字段:
1. "windowStart": 长整型时间戳,表示窗口的开始时间,精度与结果表的时间精度一致。
1. windowStart: 长整型时间戳,表示窗口的开始时间,精度与结果表的时间精度一致。
1. "windowEnd": 长整型时间戳,表示窗口的结束时间,精度与结果表的时间精度一致。
1. windowEnd: 长整型时间戳,表示窗口的结束时间,精度与结果表的时间精度一致。
1. "result": 计算结果,为键值对形式,包含窗口计算的结果列列名及其对应的值。
1. result: 计算结果,为键值对形式,包含窗口计算的结果列列名及其对应的值。
#### 事件窗口相关字段
#### 事件窗口相关字段
这部分是 "windowType" 为"Event" 时 event 对象才有的字段。
这部分是 windowType 为 Event 时 event 对象才有的字段。
1. 如果 " eventType" 为 " WINDOW_OPEN" ,则包含如下字段:
1. 如果 eventType 为 WINDOW_OPEN, 则包含如下字段:
1. "windowStart": 长整型时间戳,表示窗口的开始时间,精度与结果表的时间精度一致。
1. windowStart: 长整型时间戳,表示窗口的开始时间,精度与结果表的时间精度一致。
1. "triggerCondition": 触发窗口开始的条件信息,包括以下字段:
1. triggerCondition: 触发窗口开始的条件信息,包括以下字段:
1. "conditionIndex": 整型, 表示满足的触发窗口开始的条件的索引, 从0开始编号。
1. conditionIndex: 整型, 表示满足的触发窗口开始的条件的索引, 从0开始编号。
1. "fieldValue": 键值对形式,包含条件列列名及其对应的值。
1. fieldValue: 键值对形式,包含条件列列名及其对应的值。
1. 如果 " eventType" 为 " WINDOW_CLOSE" ,则包含如下字段:
1. 如果 eventType 为 WINDOW_CLOSE, 则包含如下字段:
1. "windowStart": 长整型时间戳,表示窗口的开始时间,精度与结果表的时间精度一致。
1. windowStart: 长整型时间戳,表示窗口的开始时间,精度与结果表的时间精度一致。
1. "windowEnd": 长整型时间戳,表示窗口的结束时间,精度与结果表的时间精度一致。
1. windowEnd: 长整型时间戳,表示窗口的结束时间,精度与结果表的时间精度一致。
1. "triggerCondition": 触发窗口关闭的条件信息,包括以下字段:
1. triggerCondition: 触发窗口关闭的条件信息,包括以下字段:
1. "conditionIndex": 整型, 表示满足的触发窗口关闭的条件的索引, 从0开始编号。
1. conditionIndex: 整型, 表示满足的触发窗口关闭的条件的索引, 从0开始编号。
1. "fieldValue": 键值对形式,包含条件列列名及其对应的值。
1. fieldValue: 键值对形式,包含条件列列名及其对应的值。
1. "result": 计算结果,为键值对形式,包含窗口计算的结果列列名及其对应的值。
1. result: 计算结果,为键值对形式,包含窗口计算的结果列列名及其对应的值。
#### 计数窗口相关字段
#### 计数窗口相关字段
这部分是 "windowType" 为"Count" 时 event 对象才有的字段。
这部分是 windowType 为 Count 时 event 对象才有的字段。
1. 如果 " eventType" 为 " WINDOW_OPEN" ,则包含如下字段:
1. 如果 eventType 为 WINDOW_OPEN, 则包含如下字段:
1. "windowStart": 长整型时间戳,表示窗口的开始时间,精度与结果表的时间精度一致。
1. windowStart: 长整型时间戳,表示窗口的开始时间,精度与结果表的时间精度一致。
1. 如果 " eventType" 为 " WINDOW_CLOSE" ,则包含如下字段:
1. 如果 eventType 为 WINDOW_CLOSE, 则包含如下字段:
1. "windowStart": 长整型时间戳,表示窗口的开始时间,精度与结果表的时间精度一致。
1. windowStart: 长整型时间戳,表示窗口的开始时间,精度与结果表的时间精度一致。
1. "windowEnd": 长整型时间戳,表示窗口的结束时间,精度与结果表的时间精度一致。
1. windowEnd: 长整型时间戳,表示窗口的结束时间,精度与结果表的时间精度一致。
1. "result": 计算结果,为键值对形式,包含窗口计算的结果列列名及其对应的值。
1. result: 计算结果,为键值对形式,包含窗口计算的结果列列名及其对应的值。
#### 窗口失效相关字段
#### 窗口失效相关字段
因为流计算过程中会遇到数据乱序、更新、删除等情况,可能造成已生成的窗口被删除,或者结果需要重新计算。此时会向通知地址发送一条 " WINDOW_INVALIDATION" 的通知,说明哪些窗口已经被删除。
因为流计算过程中会遇到数据乱序、更新、删除等情况,可能造成已生成的窗口被删除,或者结果需要重新计算。此时会向通知地址发送一条 WINDOW_INVALIDATION 的通知,说明哪些窗口已经被删除。
这部分是 " eventType" 为 " WINDOW_INVALIDATION" 时, event 对象才有的字段。
这部分是 eventType 为 WINDOW_INVALIDATION 时, event 对象才有的字段。
1. "windowStart": 长整型时间戳,表示窗口的开始时间,精度与结果表的时间精度一致。
1. windowStart: 长整型时间戳,表示窗口的开始时间,精度与结果表的时间精度一致。
1. " windowEnd" : 长整型时间戳,表示窗口的结束时间,精度与结果表的时间精度一致。
1. windowEnd: 长整型时间戳,表示窗口的结束时间,精度与结果表的时间精度一致。