【问题标题】:Amazon Kinesis - Identify Step TimeoutAmazon Kinesis - 识别步骤超时
【发布时间】:2017-10-02 22:01:50
【问题描述】:

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

随着多步骤流程一步一步进行,我有大量包含状态更新的数据。我正在尝试编写一个查询,该查询可以识别下一步何时在特定时间内没有发生(也就是超时)。具体来说,我想知道单个 ProcessID 何时未在 5 分钟内从“已启动”变为“正在运行”。

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

我的活动具有三个属性:
ProcessID - 整数
状态 - 字符串(“已开始”、“正在运行”或“完成”)
HappenedOn - 日期时间(例如 2017-10-02 15:17:00)

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

在 SQL 中,我会使用 LEFT OUTER JOIN 将事件表连接到自身,但无法弄清楚如何在实时查询情况下执行此操作。

#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 分钟后查找相应的事件(或缺少它们)(例如,需要在当前日期时间和 HAPPENED 之间执行 DATEDIFF) .任何有关如何添加此内容的建议将不胜感激。

另外,我觉得我需要使用 FOLLOWING 而不是 PRECEDING,但 SQL 解析器不会让我这样做(我知道为什么)。我也对将 OVER 窗口添加到...LEFT 的哪个流加入感到困惑?对?两个都?

提前非常感谢。

【问题讨论】:

  • 作为参考,亚马逊文档谈到在 this article 中使用 OUTER JOIN 但每次我尝试使用 FOLLOWING 而不是 PRECEDING 时,SQL 验证器都会生我的气。

标签: amazon-kinesis amazon-kinesis-kpl


【解决方案1】:

您可以使用 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

【讨论】:

  • 哇!这很棒。我知道 Drools 可以做到这一点,但不知道市场上有 AWS Kinesis 选项。非常感谢您的帮助!
  • @TimMerkel:如果您觉得有帮助,请标记为答案
猜你喜欢
  • 2017-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-10
  • 2018-06-27
  • 1970-01-01
  • 2017-03-27
  • 1970-01-01
相关资源
最近更新 更多