Оптимизация запроса Vertica SQL для получения промежуточных итогов

У меня есть таблица S с данными временных рядов, подобными этому:

key   day   delta

Для данного ключа это возможно, но маловероятно, что дни будут отсутствовать.

Я хотел бы построить кумулятивный столбец из значений дельты (положительные INT), чтобы вставить эти кумулятивные данные в другую таблицу. Вот что у меня есть на данный момент:

SELECT key, day,
   SUM(delta) OVER (PARTITION BY key ORDER BY day asc RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
   delta
FROM S

В моем вкусе SQL предложение окна по умолчанию - RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW, но я оставил это здесь, чтобы быть явным.

Этот запрос очень медленный, как на порядок медленнее, чем в старом неработающем запросе, в котором суммарное количество заполнялось нулями. Есть ли предложения по поводу других методов генерации кумулятивных чисел?

Я рассмотрел решения здесь: Текущий итог по сгруппированным записям в таблице

Я использую RDBM, это Vertica. Vertica SQL исключает первое решение с подвыбором, а его планировщик запросов предсказывает, что решение второго левого внешнего соединения примерно в 100 раз дороже, чем аналитическая форма, которую я показываю выше.

8
задан Community 23 May 2017 в 12:14
поделиться