我正在使用AWS Kinesis Data Analytics尝试抓住通过我的信息流中最受欢迎的项目。我希望能够看到过去一小时内最受欢迎的商品,并且每分钟更新一次。换句话说,每小时更新一个小时的滑动窗口。
我差点儿,但不太合适。它确实给了我一个小时的滑动窗口,每分钟更新一次,用于最近一分钟内包含的项目。
我想让最后一小时内看到的任何物品每分钟吐出一次,直到最近的一次事件落到窗外。
我尝试过的事情:
TUMBLE_STREAM
,然后每隔一分钟将每个item_id
的计数插入此流中。TUMBLE_STREAM
的内容,并将结果插入到我的目标流中。这是我的SQL:
CREATE OR REPLACE STREAM "DESTINATION_SQL_STREAM" ("count" bigint, "item_id" bigint);
CREATE OR REPLACE STREAM "TUMBLE_STREAM" ("item_id_count" bigint, "item_id" bigint);
CREATE OR REPLACE PUMP "TUMBLE_PUMP" AS INSERT INTO "TUMBLE_STREAM"
SELECT STREAM COUNT(*) AS item_id_count, "item_id"
FROM "SOURCE_SQL_STREAM_001"
GROUP BY FLOOR("SOURCE_SQL_STREAM_001".ROWTIME TO MINUTE), "item_id";
CREATE OR REPLACE PUMP "SLIDE_PUMP" AS INSERT INTO "DESTINATION_SQL_STREAM"
SELECT STREAM SUM("item_id_count") OVER ONE_HOUR AS "hour_count", "item_id"
FROM "TUMBLE_STREAM"
WINDOW ONE_HOUR AS (
PARTITION BY "item_id"
RANGE INTERVAL '1' HOUR PRECEDING)
ORDER BY "ROWTIME", "hour_count" DESC;
这会产生类似于此的输出:
ROWTIME count item_id
2018-05-10 17:41:00.001 1 1
2018-05-10 17:41:00.001 1 2
2018-05-10 17:41:00.001 2 3
2018-05-10 17:41:00.001 10 4
2018-05-10 17:41:00.001 26 5
* one minute later *
2018-05-10 17:42:00.001 4 3
2018-05-10 17:42:00.001 1 6
2018-05-10 17:42:00.001 11 4
2018-05-10 17:42:00.001 3 7
2018-05-10 17:42:00.001 30 5
我想要的是更像这样的输出:
ROWTIME count item_id
2018-05-10 17:41:00.001 1 1
2018-05-10 17:41:00.001 1 2
2018-05-10 17:41:00.001 2 3
2018-05-10 17:41:00.001 10 4
2018-05-10 17:41:00.001 26 5
* one minute later *
2018-05-10 17:42:00.001 1 1
2018-05-10 17:42:00.001 1 2
2018-05-10 17:42:00.001 4 3
2018-05-10 17:42:00.001 1 6
2018-05-10 17:42:00.001 11 4
2018-05-10 17:42:00.001 3 7
2018-05-10 17:42:00.001 30 5
新的item_id
可以随时出现在流中。如何在滑动查询的输出中包含过去一小时内的所有item_id
?