Можно ли добиться "отложенного выполнения" с KSQL?

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

Я не думаю, что в настоящее время это возможно с ksqlDB, по крайней мере, до тех пор, пока он не будет поддерживать неключевые соединения.

Другие вопросы по тегам