[英]Stuck with kinesis stagger window
我設置了一個運動分析應用程序,它從具有以下模式的運動流中獲取數據。
--------------------------
Column ColumnType
--------------------------
Level varchar(10)
RootID varchar(32)
ProcessID varchar(16)
EntityName varchar(64)
Message varchar(512)
Threshold varchar(32)
TriggerTime timestamp
我的目標是創建一個實時運動分析解決方案,該解決方案將級別為“OVERFLOW”的記錄隔離開來,並根據 RootID 對它們進行分組。 理想情況下,屬於 RootID 的所有記錄都應在 5 分鍾內達到運動。 所以我正在考慮為此設置一個交錯窗口,到目前為止我已經想出了這個 SQL。
CREATE OR REPLACE STREAM "OVERFLOW_SQL_STREAM" (
"Level" varchar (10),
"RootID" varchar (32),
"ProcessID" varchar(16),
"EntityName" varchar(64),
"Message" varchar(512),
"Threshold" varchar(32),
"TriggerTime" timestamp
);
CREATE OR REPLACE PUMP "STREAM_PUMP" AS
INSERT INTO "OVERFLOW_SQL_STREAM"
SELECT STREAM
"Level" varchar (10),
"RootID" varchar (32),
"ProcessID" varchar(16),
"EntityName" varchar(64),
"Message" varchar(512),
"Threshold" varchar(32),
"TriggerTime" timestamp
FROM "SOURCE_SQL_STREAM_001"
WHERE "Level" like "OVERFLOW"
WINDOWED BY STAGGER (
PARTITION BY "RootID",FLOOR("TriggerTime" TO MINUTE) RANGE INTERVAL '5' MINUTE);
我在 SQL 中收到一條錯誤消息,指出“PARTITION BY 子句沒有‘Level’列”。 我不明白為什么我應該將該列添加到分區,因為我希望我的記錄僅按 RootID 列而不按任何其他列進行分區。 添加該列會引發錯誤,提示我應該添加下一列,依此類推。 我無法理解錯誤。 請幫助我!謝謝!
此類問題有一個解決方法。 您可以使用 FIRST_VALUE() 或 LAST_VALUE() 來轉換結果而不是直接傳遞它們。
CREATE OR REPLACE PUMP "STREAM_PUMP" AS
INSERT INTO "OVERFLOW_SQL_STREAM"
SELECT STREAM
LAST_VALUE("Level") AS Level,
"RootID" varchar (32),
....
....
....
"TriggerTime" timestamp
FROM "SOURCE_SQL_STREAM_001"
WHERE "Level" like "OVERFLOW"
WINDOWED BY STAGGER (
PARTITION BY "RootID",FLOOR("TriggerTime" TO MINUTE) RANGE INTERVAL '5' MINUTE);
這是無需添加到 PARTITION BY 子句即可創建流泵的方法。
FIRST_VALUE() -- 獲取與流分區匹配的級別的第一個值(此處為 RootID)
LAST_VALUE() -- 反之亦然
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.