跳至主要內容
資料品質 SQL查詢範例

揪出讓平均值漏算資料列的事件欄位改名

比較舊計時欄位的平均值與依結構版本計算的覆蓋率,避免事件欄位改名後悄悄漏算已完成的任務。

中級job_finished已審查 2026-09-30測試用 阿帕奇 DataFusion 45.2.0

審閱者 Telemetry產品團隊 上 . 我們檢查了 SQL 語法、必要的事件欄位、範例結果和查詢使用限制. 誰負責審查此頁面

問題已回答

欄位改名是否讓耗時平均值漏算已完成的任務?

埋點改動後,查詢仍可能回傳看似合理的平均值。先計算所有完成事件,再依每個已記錄的結構版本對應計時欄位,並在平均值旁顯示有可用數值的比例。

事件結構

查詢期望的欄位

欄位型別為什麼存在
timestamp_utcTimestamp完成事件的 UTC 時間;在正式環境中應使用固定的分析時段。
job_idUtf8每列代表一個虛構的已完成邏輯任務。
schema_versionInt64事件格式版本;第 1 版使用 duration_ms,第 2 版使用 latency_ms。
duration_msInt64第 1 版的耗時;第 2 版為 null。
latency_msInt64第 2 版的耗時;第 1 版為 null。
DataFusion SQL

複製查詢

sql
WITH normalized AS (
  SELECT
    job_id,
    schema_version,
    duration_ms,
    CASE schema_version
      WHEN 1 THEN duration_ms
      WHEN 2 THEN latency_ms
    END AS measured_ms
  FROM job_finished
)
SELECT
  COUNT(*) AS completed_jobs,
  COUNT(duration_ms) AS jobs_in_old_average,
  ROUND(AVG(duration_ms), 1) AS old_average_ms,
  COUNT(measured_ms) AS jobs_with_duration,
  SUM(CASE WHEN measured_ms IS NULL THEN 1 ELSE 0 END) AS unmeasured_jobs,
  ROUND(100.0 * COUNT(measured_ms) / NULLIF(COUNT(*), 0), 1)
    AS duration_coverage_pct,
  ROUND(AVG(measured_ms), 1) AS schema_aware_average_ms
FROM normalized;

此只讀查詢是針對空型別資料表計劃和執行的 阿帕奇 DataFusion 45.2.0。確定性樣本輸出是綜合的並單獨審查;根據您自己的資料驗證欄位型別、閾值和業務定義。 閱讀測試方法。

查詢結果

看似合理的平均值可能只涵蓋一半任務

舊欄位只計入兩個虛構任務,平均為 475 毫秒;依版本對應欄位後,四個任務的平均為 580 毫秒。

completed_jobsjobs_in_old_averageold_average_msjobs_with_durationunmeasured_jobsduration_coverage_pctschema_aware_average_ms
4247540100580

綜合範例輸出。在將其用於操作決策之前,針對您自己的事件架構和閾值執行查詢。

A plausible average can cover only half the jobs:來自 Catch event-field renames that hide rows from averages 範例結果的合成 jobs_with_duration 值的靜態圖表
確定性範例輸出的可索引 SVG。下載它以獲取帶有歸屬的文章、操作手冊或設計評論。

重現範例

下載範例資料

JSON 包包含型別化事件契約, reproducible 輸入行、確切的 SQL、預期輸出、審閱註釋和引擎版本。 CSV 包含顯示的結果。

SQL 是如何工作的

  1. 1舊查詢 AVG(duration_ms) 仍回傳 475 毫秒,因為 SQL 平均值會略過 null;四個已完成任務中只有兩個被計入。
  2. 2依版本判斷的 CASE 將第 1 版對應 duration_ms、第 2 版對應 latency_ms,因此四個虛構任務的平均為 580 毫秒。
  3. 3將耗時欄位覆蓋率與平均值並列。未知版本或缺少欄位時,平均值可能不變,但覆蓋率會下降。

需要檢查的邊界情況

  • 比較版本時使用固定的 UTC 時段;本例的四筆虛構資料全部納入計算。
  • 本例假設每個已完成的邏輯任務只有一筆完成事件。用於實際任務計數前,應依 job_id 去除重複的完成事件。
  • 只有兩個版本測量相同起點、終點且使用相同單位時,改名後的欄位才可比較。
  • 缺少或未知的 schema_version 會對應為 null,並降低覆蓋率;不要悄悄改用舊欄位補值。
  • 這四筆資料是虛構的,不代表客戶、真實事故或實測產品效能。

推薦儀表板

  • 表格:依版本顯示已完成任務數、耗時覆蓋率與平均值
  • 趨勢:部署前後的耗時欄位覆蓋率

警示指導

先訂出預期的最低事件數並記錄版本對應方式,再針對耗時覆蓋率下降設定警示。

讀取警示設定

設定此查詢需要的事件

相關埋點和指南

繼續分析

在你的事件上執行

建立資料表,調整欄位並儲存結果

免費開始,傳送結構化事件,並將查詢結果用作圖表、共享儀表板小工具或警示輸入。

獲取 API 金鑰