首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只有在找到至少一个匹配条件的事件时,才输出条件的事件,否则输出输入。

只有在找到至少一个匹配条件的事件时,才输出条件的事件,否则输出输入。
EN

Stack Overflow用户
提问于 2016-05-18 13:51:52
回答 1查看 105关注 0票数 2

我的输入有一个“条件”字段,只有两个值。让我们只假定值'A‘或'B’。

当在滚动窗口中找到至少一个带有condition=A的事件时,应该只输出带有condition=A的事件。但是,当没有找到A的事件时,应该在同一个窗口中输出B的事件。给定以下输入,其滚动窗口为4条滴答:

代码语言:javascript
复制
  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   

产出应如下:

代码语言:javascript
复制
  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    

如何设置我的步骤,以便从我的输入中获得以下输出?我尝试了几种使用组的方法,但都失败了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-26 01:30:22

这是个有趣的问题。首先,请允许我更正您对窗口的定义。从0到16的时间范围内,4个滴答的窗口是:

代码语言:javascript
复制
( 0 -  4]
( 4 -  8]
( 8 - 12]
(12 - 16]

,其中不包括开始时间,并包括结束时间。结束时间是该窗口上计算结果的时间戳。

下面是计算您的答案的查询。

代码语言:javascript
复制
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步骤计算窗口中A的数目。这将在窗口的每一端产生一个事件(在本例中为4、8、12和16秒),并在最后4秒中看到A的计数。

然后我们就用input重新加入它,但是只持续了4秒。我们需要小心地定义时间界限(也称为摆动空间),以正确地与窗口边界对齐。因此,使用>=0 and <4而不是between

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37301666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档