Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
функция окна аналитики
Область применения:
проверка Databricks SQL
Databricks Runtime 19.0 и выше
Вычисляет различия между последовательными кумулятивными значениями счетчиков во временном ряде, преобразуя кумулятивные счётчики в дельта-формат.
Syntax
counter_diff( value [, start_time] ) OVER clause
Arguments
-
value: Неотрицательное числовое выражение, представляющее накопительный счётчик. -
start_time: НеобязательноеTIMESTAMPвыражениеTIMESTAMP_NTZили выражение, указывающее, когда счётчик в последний раз сбрасывался до нуля. Используйте его для сброса счётчика независимо от значения счётчика. -
Оговорка OVER: Пункт, описывающий окноотделение.
- Используйте
PARTITION BYдля разделения независимых счетчиков. Типичные столбцы разбиений — это название метрики и любые атрибуты, связанные с метрикой. - Используйте
ORDER BYдля определения порядка. Обычно это столбец с временной меткой, привязанный к метрике.
- Используйте
Returns
Тип результата соответствует value.
Возвращает разницу между текущим и предыдущим счётным значением согласно порядку, определённому в ORDER BYOVER предложении.
Функция обрабатывает следующие случаи:
- Если
valueравенNULL, то результат —NULL, и строка не используется при вычислении разностей для следующих строк. - Если
valueотрицательный результат илиstart_timeраннее предыдущей строкиstart_time, Azure Databricks выдает ошибку. - Для первой строки в разбиении результат —
NULL. - При сбросе счётчика результат — .
NULL - Если предыдущий или текущий
start_time—NULL, это значение не используется для обнаружения сброса счётчика.
Azure Databricks обнаруживает сброс счётчика, когда выполняется одно из следующих условий:
- Предыдущее
valueбольше текущегоvalue. -
start_timeпредоставляется и больше предыдущей строкиstart_time.
Вам необходимо предоставить положение ORDER BY.
Распространенные условия ошибки
- COUNTER_DIFF_NEGATIVE_COUNTER_VALUE
- Время начала разницы счётчика уменьшено
- WINDOW_FUNCTION_WITHOUT_OVER_CLAUSE
- WINDOW_FUNCTION_FRAME_NOT_ORDERED
Примеры
> SELECT m, t, counter_diff(c) OVER (PARTITION BY m ORDER BY t)
FROM VALUES
('http_requests', TIMESTAMP '2026-01-01T00:00:00', 100),
('http_requests', TIMESTAMP '2026-01-01T00:01:00', 200),
('http_requests', TIMESTAMP '2026-01-01T00:02:00', 400)
AS tab(m, t, c);
http_requests 2026-01-01 00:00:00 NULL
http_requests 2026-01-01 00:01:00 100
http_requests 2026-01-01 00:02:00 200
-- Counter reset detected by a decrease in value
> SELECT m, t, counter_diff(c) OVER (PARTITION BY m ORDER BY t)
FROM VALUES
('http_requests', TIMESTAMP '2026-01-01T00:00:00', 100),
('http_requests', TIMESTAMP '2026-01-01T00:01:00', 200),
('http_requests', TIMESTAMP '2026-01-01T00:02:00', 400),
('http_requests', TIMESTAMP '2026-01-01T00:04:00', 50)
AS tab(m, t, c);
http_requests 2026-01-01 00:00:00 NULL
http_requests 2026-01-01 00:01:00 100
http_requests 2026-01-01 00:02:00 200
http_requests 2026-01-01 00:04:00 NULL
-- Counter reset detected by a change in start_time
> SELECT m, t, counter_diff(c, st) OVER (PARTITION BY m ORDER BY t)
FROM VALUES
('http_requests', TIMESTAMP '2026-01-01T00:01:00', TIMESTAMP '2026-01-01T00:00:00', 100),
('http_requests', TIMESTAMP '2026-01-01T00:02:00', TIMESTAMP '2026-01-01T00:00:00', 200),
('http_requests', TIMESTAMP '2026-01-01T00:04:00', TIMESTAMP '2026-01-01T00:02:31', 400)
AS tab(m, t, st, c);
http_requests 2026-01-01 00:01:00 NULL
http_requests 2026-01-01 00:02:00 100
http_requests 2026-01-01 00:04:00 NULL
Связанные функции
- аналитическая оконная функция
lag - аналитическая оконная функция
lead - Функции окна