У меня есть 2 потока, один поток заказов, другой для бронирования всех такси, доступных для бронирования после принятия заказа, и другой для всех заказанных такси.
Поток заказов:
Order_id: строка
timeCreated: Отметка времени
region_id: строка
Доступный поток такси :
taxi_ids: list [string]
timeCreated: timestamp
Order_id: string
Поток приложений, в основном, после размещения заказа, система проверяет, можно ли его принять, и затем мы находим все доступные такси, из которых пользователь может выбрать, которые показываются пользователю. .
событие потока, доступного для такси, создается после события заказа на следующие 2 минуты. то есть
timeCreated(Order) < timeCreated(taxi-available) < timeCreated(Order) + 2 Minutes
Я хочу рассчитать агрегат для 10-минутного окна, где я хотел бы усреднить все нет. такси доступно для данного region_id
Мой SQL выглядит следующим образом:
SELECT o.region_id, avg(length(ta.taxis))
FROM order o JOIN taxi_available ta
ON o.order_id=ta.order_id
AND
ta.timeCreated BETWEEN o.timeCreated AND o.timeCreated + INTERVAL '2' Minute
GROUP BY TUMBLE(o.timeCreated, INTERVAL '10' Minute), o.region_id
Мне бы хотелось знать, что не так в этом подходе. Работает ли объединение временного окна для агрегатов? ?
Я сомневаюсь, что
кажется, что Tumble (o.timeCreated, INTERVAL '10' Minute) работает в обоих потоках и заставляет мой запрос вычислять среднее значение для одних и тех же 10-минутных данных в обоих ,
то есть, скажем, поток заказов от 2: 00 до 2: 10 , тогда приведенное выше вычисление должно занять 2: 00 до 2: 12 из потока taxi_available, но вместо этого потребовалось от 2: 00 до 2: 10 для обоих потоков
В этом случае наступают события в последние 2 минуты потоков заказов (которые обнаружат доступные для такси события в ближайшие 2 минуты) может не найти подходящую строку, и на самом деле это среднее значение не для заказов на 10 минут, а меньше, чем на 10 минут !! !!,
Если это правда ?? что для этого можно сделать?