Fonction de fenêtre analytique counter_diff

S’applique à :check marquée oui Databricks SQL cochez oui Databricks Runtime 19.0 et versions ultérieures

Calcule les différences entre les valeurs cumulatives consécutives des compteurs dans une série chronologique, en convertissant les compteurs cumulés au format delta.

Syntax

counter_diff( value [, start_time] ) OVER clause

Arguments

  • value: Une expression numérique non négative qui représente un compteur cumulé.
  • start_time: Une option TIMESTAMP ou TIMESTAMP_NTZ une expression qui indique quand le compteur a été réinitialisé à zéro pour la dernière fois. Utilisez-le pour signaler que le compteur se réinitialise indépendamment de la valeur du compteur.
  • Clause OVER : La clause qui décrit la fenêtrement.
    • Utilisez PARTITION BY pour séparer les pions indépendants. Les colonnes de partition typiques sont le nom de la métrique et les attributs liés à la métrique.
    • Utilisez-le ORDER BY pour définir l’ordre. Il s’agit généralement d’une colonne d’horodatage liée à la métrique.

Returns

Le résultat est du type d’value.

Retourne la différence entre la valeur actuelle du compteur et la valeur du compteur précédente selon l’ordre défini par ORDER BY dans la OVER proposition.

La fonction traite les cas suivants :

  • Si value est NULL, le résultat est NULL, et la ligne n’est pas utilisée pour calculer les différences pour les lignes ultérieures.
  • Si value est négatif, ou start_time est antérieur à la ligne start_timeprécédente, Azure Databricks génère une erreur.
  • Pour la première ligne de la partition, le résultat est NULL.
  • Lors d’un réinitialisation par compteur, le résultat est NULL.
  • Si le précédent ou le courant start_time est NULL, cette valeur n’est pas utilisée pour détecter les réinitialisations des compteurs.

Azure Databricks détecte un compteur de réinitialisation lorsque l’un des critères suivants est vrai :

  • Le précédent value est supérieur au courant value.
  • start_time est fourni et est supérieur à la ligne start_timeprécédente .

Vous devez fournir une clause ORDER BY.

Conditions d’erreur courantes

Examples

> 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