Если вы используете только перетаскивающееся окно, вы можете рассматривать время как просто другое измерение и выполнять агрегирование по этому измерению и вообще не использовать никаких окон.Вот пример.Давайте рассмотрим схему входного потока следующим образом:
<sale_date BIGINT, region VARCHAR, total DOUBLE>
Предполагая, что sale_date
- это отметка времени продажи, а наше местное время - PST, мы можем использовать * 1007.* функция для извлечения различных временных гранул для каждой продажи для данного часового пояса, как показано ниже:
CREATE STREAM foo AS SELECT TIMESTAMPTOSTRING(sale_date, 'yyyy-MM-dd HH', 'PST') AS sale_hour, TIMESTAMPTOSTRING(sale_date, 'yyyy-MM-dd', 'PST') AS sale_day, TIMESTAMPTOSTRING(sale_date, 'yyyy-MM', 'PST') AS sale_month, region, total FROM orders;
Теперь вы должны иметь возможность писать свои агрегированные запросы по этому потоку.Например, для ежедневных продаж для каждого региона вы можете написать следующий запрос:
CRAETE TABLE daily_sale AS SELECT sale_day, region, sum(total) FROM foo GROUP BY sale_day, region;
Обратите внимание, что вам не нужно указывать окно для вышеуказанного запроса.