適用於:
Databricks SQL 勾
Databricks 執行時間 19.0 及以上版本
計算時間序列中連續累積計數器值的差異,並將累積計數器轉換為 delta 格式。
Syntax
counter_diff( value [, start_time] ) OVER clause
Arguments
-
value:一個非負數值表達式,代表一個累積計數器。 -
start_time:一個可選TIMESTAMPTIMESTAMP_NTZ的運算式,指示計數器最後一次重置為零的時間。 用它來獨立於計數器值來表示計數器重置。 -
OVER 條款:描述視窗的條款。
- 用
PARTITION BY來分開獨立的計數器。 典型的分割欄位包括度量名稱及與度量相關的屬性。 - 用來
ORDER BY定義順序。 這通常是與指標綁定的時間戳記欄位。
- 用
Returns
結果類型符合 value。
依據子OVER句中定義ORDER BY的順序,回傳當前計數器值與先前計數器值之間的差額。
該函數處理以下情況:
- 若
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 子句。
常見錯誤條件
範例
> 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