Заполнение пропусков в данных временных рядов
При работе с данными временных рядов могут возникать пропуски из-за отсутствующих данных или неактивности.
Обычно мы не хотим, чтобы эти пропуски существовали, когда мы запрашиваем данные. В этом случае команда 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
Любые строки, в которых значение 0
в столбце count
, также имеют 0
в накопительном столбце, тогда как мы бы предпочли, чтобы он использовал предыдущее значение в накопительном столбце.
Мы можем сделать это, используя команду INTERPOLATE
, как показано ниже:
Это выглядит гораздо лучше.
И теперь, чтобы завершить, давайте добавим график с помощью функции bar
, не забыв добавить наш новый столбец в команду INTERPOLATE
.