Эспер - Агрегации подвременных окон - PullRequest
0 голосов
/ 17 мая 2011

У меня есть поток рыночных данных со свойствами (Price, Trade Time).

Я хочу вычислить простое среднее значение для прошедших временных окон для каждого нового события рыночных данных. Простое среднее = сумма торговых цен / количество событий

Однако, сложность заключается в том, что я хочу вычислить это для нескольких вложенных окон из текущего времени события. Итак, скажите простое среднее значение для [t-0 мин, t-2 мин], [t-2 мин, t-4 мин], [t-4 мин, t-6 мин], ...

Эти временные окна будут пересчитываться для каждого нового события.

Сейчас я просто использую несколько потоков и суммирую цены и события в течение [t-0 минут, t-2 минут], [t-0 минут, t-4 минут], t-0 минут, t-6 мин], ... и найти их отдельные простые средние с помощью вычитания. Должен быть лучший способ сделать это, возможно, используя только один или два потока?

1 Ответ

0 голосов
/ 20 мая 2011

Для тех, кто пытается решить ту же проблему:

Создание пяти ступенчатых временных окон, в которых события, выходящие из одного окна, переходят в следующие ...

            create window W1.win:time(5 min) as select * from yourSource                
            create window W2.win:time(5 min) as select * from yourSource                 
            create window W3.win:time(5 min) as select * from yourSource
            create window W4.win:time(5 min) as select * from yourSource
            create window W5.win:time(5 min) as select * from yourSource

            insert into W1 select * from yourSource
            insert rstream into W2 select rstream * from W1
            insert rstream into W3 select rstream * from W2
            insert rstream into W4 select rstream * from W3
            insert rstream into W5 select rstream * from W4

            select sum(price)/count(*) as sma, symbol from W1
            GROUP BY symbol
            select sum(price)/count(*) as sma, symbol from W2
            GROUP BY symbol
            select sum(price)/count(*) as sma, symbol from W3
            GROUP BY symbol
       select sum(price)/count(*) as sma, symbol from W4
            GROUP BY symbol
            select sum(price)/count(*) as sma, symbol from W5
            GROUP BY symbol
...