仅当至少找到一个与条件匹配的单个事件时才输出条件事件,否则输出输入
Only output events for a condition when at least a single event matching the condition has been found, else output the input
我输入的字段 'condition' 只有两个值。让我们只假设值 'A' 或 'B'.
当在翻滚 window 中至少找到一个 condition=A 的事件时,仅应输出 condition=A 的事件。但是,当没有找到 A 的事件时,在同一个 window 中只输出 B 的事件。
给定以下具有 4 个刻度的翻滚 window 的输入:
Condition Time
----------- ------
A T1
B T2
A T3
B T5
B T6
B T7
B T8
B T10
A T11
A T12
A T13
A T14
A T15
输出应该如下:
Condition Time (Window)
----------- ------ ----------
A T1 T1-3
A T3 T1-3
B T5 T5-8
B T6 T5-8
B T7 T5-8
B T8 T5-8
A T11 T9-12
A T12 T9-12
A T13 T13-16
A T14 T13-16
A T15 T13-16
如何设置我的步骤以便从我的输入中获得以下输出?
我尝试了几个使用组的选项,但没有成功
这是一个有趣的问题。
首先请允许我更正您对 window 的定义。 Windows 时间范围从 0 到 16 的 4 个刻度是:
( 0 - 4]
( 4 - 8]
( 8 - 12]
(12 - 16]
,其中不包括开始时间,包括结束时间。结束时间是window.
计算结果的时间戳
下面是计算答案的查询。
WITH
count_as as (
SELECT
cnt = SUM(case cond when 'A' then 1 else 0 end)
FROM input TIMESTAMP BY time
GROUP BY tumblingwindow(second, 4)
)
SELECT
input.cond, input.time
FROM
count_as a
JOIN
input TIMESTAMP BY time
ON DATEDIFF(second, input, a) >= 0 AND DATEDIFF(second, input, a) < 4
WHERE
(a.cnt > 0 AND input.cond = 'A')
OR
(a.cnt = 0 AND input.cond = 'B')
count_as
步骤计算 window 中 A 的数量。这将在 window 的每一端(在此示例中为 4、8、12 和 16 秒)产生一个事件,其中包含在最后 4 秒内看到的 A 的计数。
然后我们用 input
加入它,但只有最后 4 秒。
我们需要小心定义时间范围(又名摆动空间)以正确对齐 window 边界。因此使用 >=0 and <4
而不是 between
.
我输入的字段 'condition' 只有两个值。让我们只假设值 'A' 或 'B'.
当在翻滚 window 中至少找到一个 condition=A 的事件时,仅应输出 condition=A 的事件。但是,当没有找到 A 的事件时,在同一个 window 中只输出 B 的事件。 给定以下具有 4 个刻度的翻滚 window 的输入:
Condition Time
----------- ------
A T1
B T2
A T3
B T5
B T6
B T7
B T8
B T10
A T11
A T12
A T13
A T14
A T15
输出应该如下:
Condition Time (Window)
----------- ------ ----------
A T1 T1-3
A T3 T1-3
B T5 T5-8
B T6 T5-8
B T7 T5-8
B T8 T5-8
A T11 T9-12
A T12 T9-12
A T13 T13-16
A T14 T13-16
A T15 T13-16
如何设置我的步骤以便从我的输入中获得以下输出? 我尝试了几个使用组的选项,但没有成功
这是一个有趣的问题。 首先请允许我更正您对 window 的定义。 Windows 时间范围从 0 到 16 的 4 个刻度是:
( 0 - 4]
( 4 - 8]
( 8 - 12]
(12 - 16]
,其中不包括开始时间,包括结束时间。结束时间是window.
计算结果的时间戳下面是计算答案的查询。
WITH
count_as as (
SELECT
cnt = SUM(case cond when 'A' then 1 else 0 end)
FROM input TIMESTAMP BY time
GROUP BY tumblingwindow(second, 4)
)
SELECT
input.cond, input.time
FROM
count_as a
JOIN
input TIMESTAMP BY time
ON DATEDIFF(second, input, a) >= 0 AND DATEDIFF(second, input, a) < 4
WHERE
(a.cnt > 0 AND input.cond = 'A')
OR
(a.cnt = 0 AND input.cond = 'B')
count_as
步骤计算 window 中 A 的数量。这将在 window 的每一端(在此示例中为 4、8、12 和 16 秒)产生一个事件,其中包含在最后 4 秒内看到的 A 的计数。
然后我们用 input
加入它,但只有最后 4 秒。
我们需要小心定义时间范围(又名摆动空间)以正确对齐 window 边界。因此使用 >=0 and <4
而不是 between
.