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

Заполнение пробелов в данных временных рядов

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