Amazon Kinesis - 识别步骤超时

Amazon Kinesis - Identify Step Timeout

正在尝试创建 Kinesis Analytics 查询以在流程中的某个步骤花费的时间过长(或终止且未继续进行)时发出警报。

随着多步骤过程一步一步移动,我有大量数据包含状态更新。我正在尝试编写一个查询,该查询可以确定下一步在特定时间内没有发生的时间(也称为超时)。具体来说,我想知道单个 ProcessID 何时不会在 5 分钟内从 "Started" 移动到 "Running"。

我知道如何在数据库中执行此操作,但是当时间尺度不断移动时它会变得混乱。非常感谢您提供的任何帮助!

我的事件具有三个属性:
ProcessID - 整数
状态 - 字符串("Started"、"Running" 或 "Complete")
HappenedOn - 日期时间(例如 2017-10-02 15:17:00)

我如何在数据库(非 Kinesis)中执行此操作

在 SQL 中,我会使用 LEFT OUTER JOIN 将事件 table 连接到自身,但不知道如何在实时查询情况下执行此操作。

#This will show me the start events that don't have a corresponding 'running' event

SELECT * FROM events as F 
LEFT OUTER JOIN events as S on F.PROCESSID = S.PROCESSID AND S.STATUS = 'running'
WHERE  F.STATUS = 'start' AND S.STATUS IS NULL;

目前在 Kinesis 中的解决方案
此查询保存并运行,但没有提供我要查找的内容。

CREATE OR REPLACE STREAM "DESTINATION_SQL_STREAM" (E1PROCESSID integer, 
E1STATUS varchar(7), E1HAPPENED varchar(32), E2PROCESSID integer, 
E2STATUS varchar(7), E2HAPPENED varchar(32) );

CREATE OR REPLACE PUMP "STREAM_PUMP" AS INSERT INTO "DESTINATION_SQL_STREAM"

SELECT F.PROCESSID, F.STATUS, F.HAPPENED, S.PROCESSID, S.STATUS, S.HAPPENED
FROM "SOURCE_SQL_STREAM_001" OVER (RANGE INTERVAL '5' MINUTE PRECEDING) AS F 
LEFT OUTER JOIN "SOURCE_SQL_STREAM_001"  AS S
ON F.PROCESSID = S.PROCESSID AND S.STATUS = 'running'
WHERE F.STATUS = 'start' AND S.STATUS IS NULL;

即使我能让上面的查询工作,我也需要 Kinesis 只在 HAPPENED 值 5 分钟后查找相应的事件(或缺少事件)(例如,需要在当前日期时间和发生了)。任何关于如何添加这个的建议将不胜感激。

此外,我觉得我需要使用 FOLLOWING 而不是 PRECEDING,但是 SQL 解析器不允许我这样做(我明白为什么)。我也对哪个流连接将 OVER window 添加到...LEFT 感到困惑?正确的?两个都?

非常感谢。

您可以通过创建以下规则使用 Drools 执行此操作:

declare EventA
  @role( event )
end

declare EventB
  @role( event ) 
end

rule "Timeout EventA"
when
  $a : EventA()
  not(exists(EventB(this after[0,5m] $a)))
then
  insertLogical(new TimeoutA($a.id));
end

您可以使用 this service

编写 Drools Kinesis Analytics