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
正在尝试创建 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