AWS Kinesis Tumbling-Sliding Window Count(流行/趋势计数)

时间:2018-05-10 18:26:07

标签: sql amazon-web-services amazon-kinesis

我正在使用AWS Kinesis Data Analytics尝试抓住通过我的信息流中最受欢迎的项目。我希望能够看到过去一小时内最受欢迎的商品,并且每分钟更新一次。换句话说,每小时更新一个小时的滑动窗口。

我差点儿,但不太合适。它确实给了我一个小时的滑动窗口,每分钟更新一次,用于最近一分钟内包含的项目

我想让最后一小时内看到的任何物品每分钟吐出一次,直到最近的一次事件落到窗外。

我尝试过的事情:

  • 首先,创建一个中间tumblingTUMBLE_STREAM,然后每隔一分钟将每个item_id的计数插入此流中。
  • 其次,在一小时sliding窗口中查询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

0 个答案:

没有答案