跳至主要內容
Telemetry
瀏覽說明文件
概念與 SQL 模式更新於 2026年7月28日由 Telemetry 編輯團隊和產品團隊審查閱讀約需 2 分鐘

讓程式設計代理使用這篇文件

開啟 Claude Code、Codex、Cursor 或其他編碼代理的集中提示包,然後將其適應此處介紹的工作流程。

用於事件分析的 SQL 視窗函式

視窗函式跨相關行進行計算,同時保留結果中的每一行。常規 GROUP BY 將許多事件減少到每組一行;視窗可以保留每天、請求或帳戶,同時新增以前的值、排名或滾動基線。

比較相鄰的桶

WITH daily AS (
  SELECT
    date_trunc('day', timestamp_utc) AS day,
    COUNT(*) AS completed_jobs
  FROM job_events
  WHERE status = 'completed'
    AND timestamp_utc >= now() - INTERVAL '30 days'
  GROUP BY date_trunc('day', timestamp_utc)
)
SELECT
  day,
  completed_jobs,
  LAG(completed_jobs) OVER (ORDER BY day) AS previous_day_jobs,
  AVG(completed_jobs) OVER (
    ORDER BY day
    ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
  ) AS rolling_7_bucket_average
FROM daily
ORDER BY day;

LAG 根據視窗順序讀取前一行。框架 AVG 計算滾動七桶基線。第一行的貢獻儲存桶少於七個,因此在需要完整視窗時標記或抑制它們。

按比較單位劃分

當每個業務需要獨立的序列時,新增PARTITION BY service。如果沒有它,前一行可能屬於另一個服務。排序列也應該是確定性的;如果兩個事件共享時間戳,請新增一個穩定識別符號作為決勝局。

ROW_NUMBER 對於為每個邏輯鍵選擇一個事件非常有用:

ROW_NUMBER() OVER (
  PARTITION BY delivery_id
  ORDER BY timestamp_utc DESC, event_id DESC
) AS newest_rank

在外部查詢中過濾為 newest_rank = 1。在使用該模式之前,確定“最新”或“首先接受”是否是正確的業務規則。

Windows 不會修復丟失的時間段、重複的源事件或不明確的行粒度。在解釋同期變化之前驗證這些條件。閱讀 SQL 重複資料刪除 瞭解身分規則,閱讀 DataFusion SQL 參考 瞭解 Telemetry 測試的視窗語法。

相關產品功能

對結構化事件資料表執行只讀 DataFusion SQL 並重用結果。

內容責任與技術參考

Telemetry 編輯團隊負責維護本文;產品團隊審查功能行為、範例和適用範圍。

檢視編輯規範