Можно ли добиться "отложенного выполнения" с KSQL?
- реализовать KSQL UDF "NOW()"
- создать поток my_notification_stream как select * из my_event_stream, где происходит Time + threshold
- прослушивание темы my_notification_stream
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, по крайней мере, до тех пор, пока он не будет поддерживать неключевые соединения.