【问题标题】:How to ONLY keep the latest window in KSQL?如何只保留 KSQL 中的最新窗口?
【发布时间】:2019-01-17 07:55:14
【问题描述】:

我想监控过去 30 天内发生的事件计数。所以我在KSQL中使用了HOPPING WINDOW(大小30天,提前1天),但它会为每个组项生成总共30个窗口,我如何编写ksql脚本只保留最新的窗口?谢谢!

CREATE TABLE FEATURE1_INDIVID_APPLY_REJECTED_COUNT_HOPPING_30_DAYS_TBL AS \
SELECT INDIVID_REGION, WindowStart() AS WINSTART, COUNT(*) AS APPLY_REJECTED_COUNT \
FROM FEATURE1_INDIVID_APPLY_REJECTED_HACKTIME_STM  \
     WINDOW HOPPING (SIZE 30 DAYS, ADVANCE BY 1 DAYS) \
WHERE INDIVID_REGION IS NOT NULL \
GROUP BY INDIVID_REGION;

【问题讨论】:

  • 这与stackoverflow.com/questions/54232400/… 有关吗?你能解释一下为什么你只想保留最新的窗口吗?
  • 是的,相关的。因为我想监控每天刷新的过去 30 天内发生的事件数。

标签: ksqldb


【解决方案1】:

您需要一个 HAVING 过滤器来过滤掉任何具有历史性 WINDOWEND 的窗口,例如

CREATE TABLE FEATURE1_INDIVID_APPLY_REJECTED_COUNT_HOPPING_30_DAYS_TBL AS \
SELECT INDIVID_REGION, WindowStart() AS WINSTART, COUNT(*) AS APPLY_REJECTED_COUNT \
FROM FEATURE1_INDIVID_APPLY_REJECTED_HACKTIME_STM  \
     WINDOW HOPPING (SIZE 30 DAYS, ADVANCE BY 1 DAYS) \
WHERE INDIVID_REGION IS NOT NULL \
GROUP BY INDIVID_REGION
HAVING WINDOWEND < UNIX_TIMESTAMP();

(ksqlDB 0.11 版本的正确语法)

不幸的是,这样的HAVING 子句需要修复Github issue 4397。一旦 ksqlDB 在HAVING 子句中支持WINDOWEND,你就可以开始使用了!

【讨论】:

  • 这正是我目前实际工作的情况。当您考虑 SIZE 1 DAYS 和 ADVANCE BY 5 分钟的 HOPPING 时,我认为窗口的数量并不能提供良好的性能。所以真的很期待这个问题得到解决。
猜你喜欢
  • 2019-05-08
  • 1970-01-01
  • 1970-01-01
  • 2019-11-06
  • 2018-12-15
  • 2019-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多