Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Fonction de fenêtre analytique
S’applique à :
Databricks SQL
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 optionTIMESTAMPouTIMESTAMP_NTZune 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 BYpour 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 BYpour définir l’ordre. Il s’agit généralement d’une colonne d’horodatage liée à la métrique.
- Utilisez
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
valueestNULL, le résultat estNULL, et la ligne n’est pas utilisée pour calculer les différences pour les lignes ultérieures. - Si
valueest négatif, oustart_timeest antérieur à la lignestart_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_timeestNULL, 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
valueest supérieur au courantvalue. -
start_timeest fourni et est supérieur à la lignestart_timeprécédente .
Vous devez fournir une clause ORDER BY.
Conditions d’erreur courantes
- COUNTER_DIFF_NEGATIVE_COUNTER_VALUE
- COUNTER_DIFF_START_TIME_DECREASED
- WINDOW_FUNCTION_WITHOUT_OVER_CLAUSE
- WINDOW_FUNCTION_FRAME_NOT_ORDERED
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