Это действительно зависит от того, как вы хотите настроить свою систему, какой анализ вы хотите сделать и что именно вы подразумеваете под «запросом»
Для одноразового анализа вы можете просто захотеть сделать stream.transform(...).to()
и фильтр по ключу и отметке времени (context.timestamp()
- ваш друг) в вашем Transformer
и запишите результат в топи c. Следовательно, вы должны запустить эту программу один раз для некоторого ключевого и временного диапазона. Возможно, вы могли бы даже выполнить необходимый анализ перед тем, как написать какой-либо результат, вы используете WindowStore
(с включенным дублированием) для буферизации всех данных в хранилище).
Если вы хотите написать программу, которая подготавливает ** все * данные для анализа, вы должны использовать groupBy()
(или grouByKey()
). Использование windowedBy()
с TimeWindows
работает только из тех случаев, когда вы знаете временные диапазоны, которые вы хотите сгруппировать данные заранее (например, ежечасно, ежедневно или аналогично). Для самой агрегации вы можете вернуть объект List<Value>
и накопить соответствующие записи для каждого ключа и окна. Таким образом, вы можете использовать IQ для получения всех записей для указанного ключа и окна за один поиск.