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