2017-10-02 17 views
1

プロセスのステップが長すぎる(または停止して移動しなかった)ときに警告するKinesis Analyticsクエリを作成しようとしています。Amazon Kinesis - ステップのタイムアウトを確認する

私は、段階的なプロセスが段階的に進むにつれて状態の更新を含むデータを持っています。私は、特定の時間内に次のステップが発生していないことを特定できるクエリを作成しようとしています(別名タイムアウト)。具体的には、単一のProcessIDが「開始済み」から「実行中」に5分以内に移動しないことを知りたいと思います。

私はデータベースでこれを行う方法を知っていますが、タイムスケールが絶えず動いていると混乱します。あなたが提供できるどんな助けも大歓迎です!

私のイベントは3つの属性があります: - 整数
ステータス -

ProcessIDのを文字列( "実行"、 "開始"、または "完了")
HappenedOn - 日時(例:2017年10月2日15:私はLEFT OUTER JOINを使用して自分自身にイベントテーブルを結合を使用しますが、どのように把握することはできません17:00)

SQLでは

私はデータベースでこれを行うだろうか(非キネシス)

これをリアルタイムで実行する事態。

#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; 

ソリューションこれまでキネシス
でこのクエリは、保存して実行しますが、私は探しています何を私に与えるものではありません。

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; 

私は上記のクエリは、仕事を得ることができたとしても、私はイベントのみ(またはそれらの欠如)に対応するために見てキネシスを必要とする5分起こった後の値(例えば電流との間のDATEDIFFを行う必要があります日時とHAPPENED)。これを追加する方法についてのアドバイスをいただければ幸いです。

また、私はPRECEDINGではなくFOLLOWINGを使用する必要があるように感じますが、SQLパーサは私を(そして私はなぜ見ることができますか?私はまた、OVERウィンドウを追加するストリーム結合に混乱しています... LEFT?右?どちらも?

事前に感謝します。

+0

とDroolsのキネシスAnalyticsを作成できますが([この記事]に登録しようhttp://docs.aws.amazon.com/kinesisanalytics/latest/dev/stream-joins-concepts.html)、SQLバリデーターをPRECEDINGではなくFOLLOWINGを使用しようとするたびに、私は怒ってしまいます。 –

答えて

0

あなたは次のルールを作成することによって、この使用して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 

あなたがOUTERを使用することについて、参照するAmazonの文書会談についてthis service

+0

うわー!これは素晴らしい。私はDroolsがこれを行うことができたが、市場にAWS Kinesisオプションがあることを知らなかった。助けてくれてありがとう! –

+0

@TimMerkel:役に立つと思われる場合は、回答としてマークしてください –

関連する問題