Заполнение пробелов в данных временных рядов
При работе с данными временных рядов могут возникнуть пробелы в данных из-за отсутствия данных или бездействия.
Как правило, мы не хотим, чтобы эти пробелы существовали, когда мы запрашиваем данные. В этом случае может помочь оператор WITH FILL
.
Этот гид обсуждает, как использовать WITH FILL
для заполнения пробелов в ваших данных временных рядов.
Настройка
Представим, что у нас есть следующая таблица, которая хранит метаданные о изображениях, созданных службой генерации изображений GenAI:
Давайте импортируем несколько записей:
Запрос по сегментам
Мы собираемся исследовать изображения, созданные между 00:24:03
и 00:24:04
24 марта 2023 года, так что давайте создадим некоторые параметры для этих временных точек:
Далее мы напишем запрос, который группирует данные в сегменты по 100 мс и возвращает количество изображений, созданных в этом сегменте:
Набор результатов включает только сегменты, где было создано изображение, но для анализа временных рядов мы, возможно, захотим вернуть каждый сегмент по 100 мс, даже если в нем нет записей.
WITH FILL
Мы можем использовать оператор WITH FILL
, чтобы заполнить эти пробелы.
Мы также укажем STEP
, который представляет собой размер пробелов для заполнения.
По умолчанию это 1 секунда для типов DateTime
, но мы хотим заполнить пробелы длиной 100 мс, поэтому мы укажем интервал в 100 мс в качестве значения шага:
Мы можем видеть, что пробелы были заполнены значениями 0 в столбце 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
.