функция окна аналитики counter_diff

Область применения:check помечена да проверка 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_timeNULL, это значение не используется для обнаружения сброса счётчика.

Azure Databricks обнаруживает сброс счётчика, когда выполняется одно из следующих условий:

  • Предыдущее value больше текущего value.
  • start_time предоставляется и больше предыдущей строки start_time.

Вам необходимо предоставить положение ORDER BY.

Распространенные условия ошибки

Примеры

> 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