0
  1. 实现 KSQL UDF “NOW()”
  2. 创建流 my_notification_stream 作为 select * from my_event_stream 其中发生时间 + 阈值 < NOW()
  3. 收听 my_notification_stream 主题
4

1 回答 1

0

我认为您提出的解决方案不会像您期望的那样工作,因为流数据会尽快处理。结果不会随着时间的推移而重新计算。

但是,您也许可以通过其他方式实现您想要的。

举个例子,如果没有收到付款,希望在 30 分钟后自动关闭订单。这可以通过在 30 分钟的窗口内将订单流与支付流左连接,然后通过支付过滤掉任何结果来实现。这会给你一个未付订单流:

-- create stream of unpaid orders:
CREATE STREAM UNPAID AS 
   SELECT * FROM ORDERS 
     LEFT JOIN PAYMENTS WITHIN 30 MINUTES ON ORDERS.ORDERID = PAYMENTS.ORDERID
   WHERE PAYMENTS.ORDERID IS NULL;

第二个例子,如果我理解正确的话,可能会更棘手。您可以轻松构建用户表,包括他们的订阅何时结束。但是,这对于您需要的“到期前 3 天”来说是不够的。问题是NOW你说的udf只在处理数据的时候执行,而不是随着挂钟时间的变化。您需要的是提示 ksqlDB 重新评估您的表达式的其他方式。

我认为 ksqlDB 目前不可能做到这一点,至少在它支持非键连接之前是不可能的。

于 2020-06-01T15:10:21.587 回答