Skip to main content
При работе с данными временных рядов в них могут возникать пропуски из-за отсутствия данных или периодов неактивности. Обычно при выполнении запроса такие пропуски нежелательны. В этом случае может быть полезно предложение WITH FILL. В этом руководстве рассматривается, как использовать WITH FILL для заполнения пропусков в данных временных рядов.

Настройка

Представим, что у нас есть следующая таблица, в которой хранятся метаданные об изображениях, созданных сервисом GenAI для генерации изображений:
Импортируем несколько записей:

Запрос по бакету

Давайте рассмотрим изображения, созданные в промежутке между 00:24:03 и 00:24:04 24 марта 2023 года, и создадим параметры для этих моментов времени:
Далее мы напишем запрос, который разбивает данные на 100-мс бакеты и возвращает количество изображений, созданных в каждом из них:
Результирующий набор включает только те бакеты, в которых было создано изображение, но для анализа временных рядов может потребоваться вернуть каждый 100-мс бакет, даже если в нём нет ни одной записи.

WITH FILL

Мы можем использовать предложение WITH FILL, чтобы заполнить эти пропуски. Мы также укажем STEP, то есть размер заполняемых промежутков. По умолчанию для типов DateTime это значение равно 1 секунде, но нам нужно заполнять промежутки длиной 100 мс, поэтому зададим интервал 100 мс в качестве значения шага:
Мы видим, что пропуски в столбце count были заполнены значениями 0.

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, хотя нам нужно, чтобы использовалось предыдущее значение из столбца cumulative. Этого можно добиться с помощью предложения INTERPOLATE, как показано ниже:
Так выглядит гораздо лучше. А теперь, чтобы завершить, давайте добавим столбчатую диаграмму с помощью функции bar, не забыв добавить наш новый столбец в секцию INTERPOLATE.
Последнее изменение 3 июля 2026 г.