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