- 实现 KSQL UDF “NOW()”
- 创建流 my_notification_stream 作为 select * from my_event_stream 其中发生时间 + 阈值 < NOW()
- 收听 my_notification_stream 主题
问问题
215 次
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 回答