Перейти к основному содержимому
Перейти к основному содержимому

Заполнение пропусков в данных временных рядов

При работе с данными временных рядов могут возникать пропуски в данных из-за отсутствия данных или бездействия. Обычно мы не хотим, чтобы такие пропуски существовали, когда выполняем запрос к данным. В этом случае клаузула WITH FILL может оказаться очень полезной. Этот гид обсуждает, как использовать WITH FILL, чтобы заполнить пропуски в ваших данных временных рядов.

Настройка

Представим, что у нас есть следующая таблица, которая хранит метаданные об изображениях, сгенерированных сервисом изображений GenAI:

Давайте импортируем некоторые записи:

Запрос по интервалу

Мы собираемся исследовать изображения, созданные между 00:24:03 и 00:24:04 24 марта 2023 года, поэтому давайте создадим некоторые параметры для этих точек времени:

Затем мы напишем запрос, который группирует данные в интервалы по 100 мс и возвращает количество изображений, созданных в этом интервале:

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

WITH FILL

Мы можем использовать клаузулу WITH FILL, чтобы заполнить эти пробелы. Мы также укажем STEP, который обозначает размер заполняемых интервалов. По умолчанию это 1 секунда для типов DateTime, но мы хотим заполнять пробелы длиной 100 мс, поэтому давайте установим интервал в 100 мс в качестве значения шага:

Мы видим, что промежутки были заполнены нулевыми значениями в колонке count.

WITH FILL...FROM

Тем не менее, по-прежнему существует пропуск в начале временного диапазона, который мы можем исправить, указав FROM:

Как видно из результатов, теперь все интервалы от 00:24:03.000 до 00:24:03.500 также отображаются.

WITH FILL...TO

Однако мы все еще пропускаем некоторые интервалы в конце временного диапазона, которые мы можем заполнить, указав значение TO. TO не включается, поэтому мы добавим небольшое значение к времени окончания, чтобы убедиться, что оно будет включено:

Все пропуски теперь заполнены, и у нас есть записи для каждых 100 мс с 00:24:03.000 до 00:24:05.000.

Кумулятивная статистика

Предположим, теперь мы хотим сохранить кумулятивное количество созданных изображений по интервалам. Мы можем сделать это, добавив колонку cumulative, как показано ниже:

Значения в кумулятивной колонке не работают так, как нам хотелось бы.

WITH FILL...INTERPOLATE

Любые строки, у которых в колонке count стояло значение 0, также имеют 0 в колонке кумулятивной статистики, в то время как мы бы предпочли использовать предыдущее значение в колонке кумулятивной статистики. Мы можем сделать это, используя клаузулу INTERPOLATE, как показано ниже:

Теперь это выглядит гораздо лучше. И чтобы завершить, давайте добавим гистограмму, используя функцию bar, не забывая добавить нашу новую колонку в клаузулу INTERPOLATE.