Heartbeat detection(心跳检测(Heartbeat detection))¶
Supported in: Streaming
Detects when a record hasn't been seen for a configurable amount of time for a set of keys.
Transform categories: Other
Declared arguments¶
- Dataset: Input dataset.
Table - Heartbeat time unit: Unit for amount of time to wait for data for a particular key.
Enum\ - Heartbeat time value: Value for the amount of time to wait for data from a particular key.
Literal\ - Partition by columns: Set of columns to use as keys for detecting heartbeats.
Set\>
Examples¶
Example 1: Base case¶
Description: The first record from sensor_1 at time 00:00:00 triggers an alive heartbeat detection. The second record at 00:00:05 extends the timeout but does not emit a new detection. The third record from sensor_2 at 00:00:20 advances the watermark past 00:00:15, causing sensor_1's timeout timer to fire and marking its heartbeat as missed. The sensor_2 record also triggers its own alive detection.
Argument values:
- Dataset: ri.foundry.main.dataset.test
- Heartbeat time unit:
SECONDS - Heartbeat time value: 10
- Partition by columns: {
sensor_id}
Input:
| row_order | sensor_id | temperature | measurement_timestamp |
|---|---|---|---|
| 3 | sensor_2 | 19.8 | 2024-09-30T00:00:20 |
| 2 | sensor_1 | 21.0 | 2024-09-30T00:00:05 |
| 1 | sensor_1 | 20.5 | 2024-09-30T00:00:00 |
Output:
| sensor_id | alive | detection_time |
|---|---|---|
| sensor_1 | true | 2024-09-30T00:00:00Z |
| sensor_1 | false | 2024-09-30T00:00:15Z |
| sensor_2 | true | 2024-09-30T00:00:20Z |
Example 2: Base case¶
Description: Each partition key maintains independent state and timers, but all keys share the same global watermark. sensor_1 sends data at 00:00:00 and sensor_2 at 00:00:05. The record from sensor_3 at 00:00:20 advances the watermark past both timeout thresholds, causing sensor_1's timer at 00:00:10 and sensor_2's timer at 00:00:15 to fire in sequence, marking both as missed.
Argument values:
- Dataset: ri.foundry.main.dataset.test
- Heartbeat time unit:
SECONDS - Heartbeat time value: 10
- Partition by columns: {
sensor_id}
Input:
| row_order | sensor_id | temperature | measurement_timestamp |
|---|---|---|---|
| 3 | sensor_3 | 22.1 | 2024-09-30T00:00:20 |
| 2 | sensor_2 | 18.3 | 2024-09-30T00:00:05 |
| 1 | sensor_1 | 20.5 | 2024-09-30T00:00:00 |
Output:
| sensor_id | alive | detection_time |
|---|---|---|
| sensor_1 | true | 2024-09-30T00:00:00Z |
| sensor_2 | true | 2024-09-30T00:00:05Z |
| sensor_1 | false | 2024-09-30T00:00:10Z |
| sensor_2 | false | 2024-09-30T00:00:15Z |
| sensor_3 | true | 2024-09-30T00:00:20Z |
中文翻译¶
心跳检测(Heartbeat detection)¶
支持:流式处理(Streaming)
检测在可配置的时间范围内,针对一组键(keys)是否未收到某条记录。
转换类别:其他
声明参数(Declared arguments)¶
- 数据集(Dataset): 输入数据集。
表(Table) - 心跳时间单位(Heartbeat time unit): 等待特定键(key)数据的时间单位。
枚举\<天(Days), 小时(Hours), 毫秒(Milliseconds), 分钟(Minutes), 秒(Seconds), 周(Weeks)> - 心跳时间值(Heartbeat time value): 等待特定键(key)数据的时间数值。
字面量\<长整型(Literal\)> - 分区列(Partition by columns): 用作检测心跳的键(key)的列集合。
集合\<列\<任意类型(Set\)>>
示例(Examples)¶
示例1:基础情况¶
描述: 传感器1(sensor_1)在时间00:00:00的第一条记录触发生存心跳检测。第二条记录在00:00:05延长了超时时间,但未触发新的检测。传感器2(sensor_2)在00:00:20的第三条记录将水位线(watermark)推进到00:00:15之后,导致传感器1的超时计时器触发,并将其心跳标记为丢失。传感器2的记录也触发了自身的生存检测。
参数值:
- 数据集(Dataset): ri.foundry.main.dataset.test
- 心跳时间单位(Heartbeat time unit):
SECONDS - 心跳时间值(Heartbeat time value): 10
- 分区列(Partition by columns): {
sensor_id}
输入:
| row_order | sensor_id | temperature | measurement_timestamp |
|---|---|---|---|
| 3 | sensor_2 | 19.8 | 2024-09-30T00:00:20 |
| 2 | sensor_1 | 21.0 | 2024-09-30T00:00:05 |
| 1 | sensor_1 | 20.5 | 2024-09-30T00:00:00 |
输出:
| sensor_id | alive | detection_time |
|---|---|---|
| sensor_1 | true | 2024-09-30T00:00:00Z |
| sensor_1 | false | 2024-09-30T00:00:15Z |
| sensor_2 | true | 2024-09-30T00:00:20Z |
示例2:基础情况¶
描述: 每个分区键(partition key)维护独立的状态和计时器,但所有键共享同一个全局水位线(global watermark)。传感器1在00:00:00发送数据,传感器2在00:00:05发送数据。传感器3在00:00:20的记录将水位线推进到两个超时阈值之后,导致传感器1在00:00:10的计时器和传感器2在00:00:15的计时器依次触发,将两者都标记为丢失。
参数值:
- 数据集(Dataset): ri.foundry.main.dataset.test
- 心跳时间单位(Heartbeat time unit):
SECONDS - 心跳时间值(Heartbeat time value): 10
- 分区列(Partition by columns): {
sensor_id}
输入:
| row_order | sensor_id | temperature | measurement_timestamp |
|---|---|---|---|
| 3 | sensor_3 | 22.1 | 2024-09-30T00:00:20 |
| 2 | sensor_2 | 18.3 | 2024-09-30T00:00:05 |
| 1 | sensor_1 | 20.5 | 2024-09-30T00:00:00 |
输出:
| sensor_id | alive | detection_time |
|---|---|---|
| sensor_1 | true | 2024-09-30T00:00:00Z |
| sensor_2 | true | 2024-09-30T00:00:05Z |
| sensor_1 | false | 2024-09-30T00:00:10Z |
| sensor_2 | false | 2024-09-30T00:00:15Z |
| sensor_3 | true | 2024-09-30T00:00:20Z |