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

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

При работе с данными временных рядов могут возникать пропуски из-за отсутствующих данных или неактивности. Обычно мы не хотим, чтобы эти пропуски существовали, когда мы запрашиваем данные. В этом случае команда 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.