Я еще не выбрал потоковый фреймворк, но сейчас я возиться с Флинком. Но я открыт для использования Beam, Spark Streaming, и все, что я выясню, подходит для моего использования. Как бы вы сделали эквивалент следующего SQL:
SELECT a,b,c, avg(d), avg(e), ..., avg(z)
FROM whatever
GROUP BY a,b,c,d,e, ..., z
Похоже, что для Флинка среднее значение достигается через AggregateFunction https://github.com/apache/flink/blob/master/flink-core/src/main/java/org/apache/flink/api/common/functions/AggregateFunction.java#L61
Но я не понимаю, как вы делаете этот «масштаб». Похоже, что это много шаблонных только для среднего поля. Что если у меня есть несколько разных потоков с разными полями, которые мне нужно усреднить?
Делает ли это что-либо из: Flink, Beam, структурированного потокового вещания и т. Д. Проще?
В качестве примечания, есть ли простой способ эмулировать этот приятный маленький синтаксис фильтра подсчета из Postgres,
SELECT
COUNT(*) AS unfiltered,
COUNT(*) FILTER (WHERE some_condition) AS filtered
FROM whatever