具代表性的面試主題

資料工程面試:如何治理指標定義、粒度與 Join?

資料困難
OfferCC 編輯團隊發佈 更新

題幹

不同報表中的 DAU、收入與轉換率不一致。你會如何治理指標定義、實體粒度、時間窗口與 Join,防止重複計數並安全遷移口徑?

題幹與適用場景

公司裡的 DAU、收入和轉化率在不同報表中結果不一致。請設計一個語意層,讓分析師、BI、應用和自動化任務共享受治理的指標定義。

回答應討論指標契約、實體粒度、維度、join 圖、時間語意、版本、權限、緩存、品質測試和遷移。題目不要求綁定 dbt 或 Looker;它們只是可參考的實現。結果差異是虛構練習場景,不代表某工具一定能解決。

面試官考察點

統一口徑

候選人要把“指標名稱”落實為分子、分母、過濾、時間窗、去重和預設維度,而不是只建一張寬表。

粒度與 join

要識別事實表粒度,防止多對多 join 重複計數,並說明不可組合的指標如何拒絕查詢。

治理與變更

定義應進入版本控制、審查、棄用和兼容窗口,不能讓 BI 使用者隨意複製 SQL 形成第二套口徑。

可用性

語意層既要給機器可查詢的契約,也要給人可讀的說明、示例、所有者和品質狀態。

回答前需要釐清的問題

  • DAU、收入和轉化率的業務定義分別是什麼?
  • 消費者需要 SQL、API、BI 探索還是嵌入式圖表?
  • 資料源的事實粒度和時區是什麼?
  • 是否允許近實時指標和最終修訂值同時存在?
  • 指標權限按使用者、團隊、行還是列控制?
  • 舊報表需要多長兼容與遷移窗口?

30 秒回答框架

“我會把指標定義成版本化契約:名稱、說明、分子分母、過濾、時間粒度、時區、實體粒度、維度、所有者、敏感級別和品質狀態。查詢引擎根據聲明的 join 圖生成 SQL,並在可能多對多或粒度不兼容時拒絕執行。

定義通過程式碼審查發佈,保留舊版本和棄用期。消費端使用 API 或 BI 適配器,結果帶定義版本和資料新鮮度。測試包括 fixture、總數對賬、重複計數、延遲、權限和回歸差異。”

分步驟深入解答

第一步:盤點使用場景

列出報表、告警、應用和實驗分別需要的查詢、延遲和精度。先選兩三個高價值指標做試點,避免一次遷移所有 SQL。

第二步:定義契約

契約應包含 metric name、語意說明、measure、過濾、時間窗、時區、實體、維度、owner、敏感級別、版本和 freshness SLO。

第三步:建粒度與 join 圖

明確每個模型的主鍵和粒度。只有聲明為一對一或一對多且聚合方向安全的 join 才開放;多對多需要預聚合、橋接表或查詢拒絕。

第四步:處理時間與修訂

定義事件時間、處理時間、時區、遲到資料和最終修訂。近實時結果應帶 freshness 和是否 final 標誌,不能把暫時值偽裝成最終值。

第五步:發佈和權限

指標定義存入版本庫,經 owner 與資料品質審查後發佈。權限控制資料集、維度和行列;稽核誰查詢了敏感指標。舊版本設遷移期限和棄用通知。

第六步:品質與消費

為每個指標建立 fixture、對賬樣本、join 重複檢查、freshness、null 和分布測試。通過 SQL API、BI adapter 或 embedded endpoint 返回結果、版本、時區和品質狀態。

高品質示範回答

“我先挑 DAU 和收入兩個指標做試點。每個定義記錄分子、分母、過濾、事件時間、時區、實體粒度、允許維度、owner、敏感級別、版本和 freshness。DAU 明確是去重使用者還是設備;收入明確確認時間、退款和稅費處理。

語意層維護模型粒度和 join 圖,只允許安全的聚合路徑;多對多 join 要預聚合或拒絕。定義通過 Git 審查和自動測試後發佈,舊版本在窗口內繼續可用,查詢結果返回定義版本和資料新鮮度。權限覆蓋資料集與維度,敏感訪問寫稽核日誌。

驗證包括樣本對賬、重複計數、遲到資料、時區、權限、freshness 和歷史回歸。遷移從高價值報表開始,比較新舊結果並記錄可解釋差異,而不是直接重寫所有 SQL。”

常見錯誤

  • 只保存指標名稱,不保存分子分母和過濾。
  • 用寬表掩蓋不同事實粒度。
  • 允許任意 join,造成多對多重複計數。
  • 把事件時間、處理時間和時區混在一起。
  • 沒有版本、owner、棄用和遷移窗口。
  • 只測 SQL 成功,不測結果對賬和 freshness。
  • 只做 BI 插件,不提供機器可讀契約。
  • 權限只放在儀錶盤,不覆蓋底層維度和查詢稽核。

追問與應對

追問一:如何防止收入被重複計算?

先聲明收入事實粒度和唯一鍵,在 join 前按目標實體預聚合;對多對多路徑拒絕或要求橋接模型,並用已知樣本做總額對賬。

追問二:指標定義變更會破壞下游嗎?

使用新版本或兼容字段,保留舊版本和棄用日期。查詢響應帶版本,下游可以逐步遷移,變更需要 owner 和消費者批准。

追問三:近實時和最終值如何共存?

返回值、freshness、watermark 和 final 狀態。消費者必須選擇允許的延遲與修訂語意,不能把臨時值當作最終財務數字。

追問四:如何做指標權限?

按資料集、行、列和維度組合授權,敏感指標最小權限;記錄查詢者、定義版本和導出動作,定期稽核。

追問五:如何證明語意層有價值?

比較遷移前後的定義衝突數、重複 SQL、對賬差異、查詢成功率、freshness、採用率和事故數,同時確認業務使用者能解釋結果。

公開來源

同類題目