2016-09-20 38 views
0

我正在編寫一個SQL,它在出現特定條件時輸出一行。這是連接到一個流,然後調用Lambda。當這種情況在短時間內多次表明爲真時,問題就來了。每隔N分鐘我只想觸發一次Lambda。Kinesis Analytics SQL:Throtte每N分鐘只有1行

我的解決方案從DESTINATION_SQL_STREAM中讀取N分鐘的滑動窗口,如果count(*)== 0,則發送一個新行,但出現錯誤Object definition contains recursive cycle

有沒有辦法做到這一點?

回答

1

我想我誤解了關於流式傳輸的一些概念。如果您需要發送一個事件只是每N分鐘,使用類似:

CREATE OR REPLACE PUMP "STREAM_PUMP_PRE" AS INSERT INTO "PREDESTINATION_SQL_STREAM" 
SELECT STREAM FID, COUNT(*) OVER SLIDING_WINDOW AS TOTAL 
FROM "SQL_STREAM_BOTTLENECK" 
WINDOW SLIDING_WINDOW AS (PARTITION BY FID RANGE INTERVAL '60' SECOND PRECEDING); 

CREATE OR REPLACE PUMP "STREAM_PUMP_RESULT" AS INSERT INTO "DESTINATION_SQL_STREAM" 
SELECT STREAM FID, COUNT(*) AS TOTAL 
FROM "PREDESTINATION_SQL_STREAM" 
GROUP BY FID, FLOOR(PREDESTINATION_SQL_STREAM.ROWTIME TO MINUTE); 

你的數據來自SQL_STREAM_BOTTLENECK,那麼你組在最後一分鐘的所有事件,最後你發送一個事件每1分鐘。