Tomofun 的資料基礎建設及演化 — Part 2

從粗糙到精細:如何追求完美的資料品質

Rendy
Tomofun Tech Blog
9 min readSep 4, 2024

--

Tomofun 的資料基礎建設及演化 — Part 2 從粗糙到精細:如何追求完美的資料品質

壹/ 石鑿千成璧初光,月明珠影待琢晶。

在 Part 1 中,我們分享了 Tomofun 如何從數據倉儲(Data Warehouse)進化到更靈活的數據湖(Data Lake)。一路走來,我們克服了數據處理的挑戰,為未來的應用奠定穩固的基礎。

而在這篇文章中,我們將聚焦於如何淬煉數據品質,猶如雕琢原石般制定資料品質的標準和應對策略,並通過新工具 — 數據湖倉一體(Data Lakehouse)的應用突破瓶頸,將 Tomofun 的數據基礎建設推向全新的高度。

貳/ 隱約溪流繞山轉,幽幽暗石識難全。

隨著 Data Driven 觀念在 Tomofun 內部的逐步推廣,大家對於資料分析的需求猶如山川之水滔滔不絕。

當資料量變得越來越大,資料問題也像是潺潺溪流中的暗礁,讓分析師在處理和清理資料時付出了更多的心力和時間。這些資料問題大致可分為兩種:

  • 錯誤的資訊
    當分析報表與終端使用者所認知的事實不符時,通常會要求我們檢查是否有資料問題出現。常見原因可能包括測試資料遺留或資料來源的不一致,而這類資料問題的排查往往是最耗時的。
  • 資料表的「潛規則」
    對於資料表的使用者而言,神秘的代碼、莫名的空值、特殊的 ID 等,都會迫使他們花費額外的時間來尋找答案並做出相應的處理,以確保分析結果的高品質。
重複的收益資料將會導致某個月的 MRR (月經常性營收) 變成兩倍,讓人以為公司獲得了一筆「意外之財」。
Duplicated revenue data can make it seem like the company has gained an ‘unexpected fortune.’

參/ 六法同規循有序,千絲百縷織成全。

為了從根本改善問題,我們根據過去的經驗,為 Tomofun 定義了資料品質的六項原則 — 這些原則如同編織的規則,指引著每一筆資料的流向。

若資料違反這些原則,即會被視為髒資料,需加以處理。

Timeliness(即時性)
資料的匯入應在合理的時間範圍內完成,以確保資料的相關性和最新性。
Ex:就像麵包店營業前就會先把麵包烤好一樣,我們必須在每天上班時間前完成從外部系統提取銷售數據,以確保早上的業務報告能夠反映最新情況(這項原則與 Data Ingestion 的品質更相關,先埋下一個小伏筆)

Completeness(完整性)
資料表中必須包含所有必要的資料元素。意即對於必須有值的欄位便不應出現空值(null)。
Ex:如果用戶資料的國家欄位出現空值,我們便不知道他是哪個國家的用戶,當這種用戶過多時便會「自成一國」,影響到分析結果。

Uniqueness(唯一性)
每一筆具有特定細節的資料記錄在資料庫中應僅出現一次,避免重複。
Ex:假設每筆訂單都被更新10次,而我們也錯把每次的更新紀錄當成獨立的訂單,那銷量也會跟著膨風10倍哦。

Conformity(協調性)
資料應遵循所需的格式和結構,也需要考慮到易讀性以增降低學習門檻。
Ex:在用戶資料表中,用戶的帳號狀態(account_status)被以 1~5 的方式編號,使用者如果想要參透其意義,就需要花時間尋找文件、查詢文件。

Accuracy(準確性)
資料中不應包含測試或虛擬的數據(假資料)。
Ex:我們會檢查並刪除所有的測試用戶數據,確保報表中的數據準確反映真實的用戶行為。

Consistency(一致性)
對於具有相同意義的欄位,應統一欄位名稱以保持一致性。
Ex:用戶編號在不同資料表中常常有不一樣的欄位名稱,例如 account_id, user_idfurbo_account_id,其實會讓使用者很困擾。

Tomofun 的資料品質6大原則:Timeliness,   Completeness, Uniqueness, Conformity, Accuracy, Consistency。
Tomofun Data Quality Principles

肆/ 工具精良善治本,階梯層進玉始成。

新工具 Databricks 的引入

想要透過資料清理來提升品質,必須先具備彈性且高效的資料集更改能力。

我們在 Tomofun 的資料基礎建設及演化 — Part 1 中曾提到「難以更新在數據湖中的資料的問題,而 Databricks 的湖倉一體(Lakehouse)架構便能讓我們輕鬆做到這件事。

此外,Databricks 還提出了獎章架構 (Medallion Architecture) 這個概念,將資料表分成不同層級,而資料清理便是使這些資料從 Bronze 層 “升級” 到 Silver 層的一條必經之路。

  • Bronze:包含從各種來源直接收集的原始數據。這一層的資料往往包括錯誤和不一致,就像一塊尚未打磨的原石,需要進一步處理。
  • Silver:在這一層,我們透過 Tomofun 的資料品質原則對數據進行了清理和標準化處理,確保數據變得光鮮亮麗、無懈可擊。
  • Gold:這一層的數據經過聚合 (Aggregation) 和商業邏輯處理,準備好用於分析和 Tableau 的各種報表,綻放出寶石般的光輝。
Databricks 提出的獎章架構 (Medallion Architecture) 概念,資料表將通過資料品質的提升讓我們更有信心地應用在 BI 及 ML 上。
Databricks Medallion Architecture

資料清理策略的實際應用

根據 Tomofun 的資料品質原則所過濾出來的髒資料大致可以分為三類: Repairable RemovableUnresolvable。我們針對每一類施以不同的處理方式,以確保數據在清理後能夠朝著正確的方向修正。

以下將用 Databricks Delta Live Table 舉例,說明如何針對不同類別對症下藥並改善資料品質。

Repairable Data (可修復)
神秘的代碼及統一欄位名稱等問題可以通過轉換(Transform)和標準化處理,使資料變得更加易於理解和使用。

-- Use mapping to transform values
CASE
WHEN status = 1 THEN 'ACTIVE'
WHEN status = 2 THEN 'PREREGISTER'
WHEN status = 3 THEN 'INACTIVE'
WHEN status = 4 THEN 'FROZEN'
WHEN status = 5 THEN 'DELETED'
END AS account_status

Removable Data (可移除)
開發及測試資料、重複的舊資料等本不應存在於生產環境中的資料,需直接從資料表中剔除。

-- Pre-create the blacklist table
CREATE TABLE blacklist_account AS
SELECT account_id FROM account WHERE account_email LIKE '%@tomofun.com';

-- Drop test/dev records by the blacklist table
SELECT ... FROM ...
WHERE account_id NOT IN (SELECT account_id FROM blacklist_account);
-- Drop duplicated and keep latest records
SELECT ...
FROM (
SELECT o.*,
row_number() OVER (PARTITION BY order_id ORDER BY updated_time DESC) AS row_num
FROM bi_prod.bronze.order AS o
)
WHERE row_num = 1

Unresolvable Data (無法解決)
真實資料中出現的空值或異常值,通常源自資料來源有問題。對於這類資料,我們會將其隔離起來並記錄佔比,即為資料品質分數。

當資料品質分數過低時,代表無法處理而被隔離的資料已經太多了,需要追查根本原因,並與資料來源負責單位合作解決問題。

-- Drop the abnormal records but calculate that in the DQ score
CONSTRAINT valid_locale EXPECT account_locale IS NOT NULL ON VIOLATION DROP ROW
在 Databricks 的 DLT Pipeline 中,資料寫入的比例被我們當作資料品質分數,分數過低時就需要採取救援行動。
Data Quality Score in DLT Pipeline

伍/ 碧海深藏無價寶,攀峰極目見星辰。

本文回顧了我們在資料品質控管上的挑戰,並介紹了我們為應對這些挑戰而制定的原則和策略,最終成功地將資料清理和轉換應用於實際操作中,使資料品質分數從79%提升到99%,分析效率也提升了30%。

在對 Tomofun 86 張資料表實施資料品質系統後,整體資料品質從 79% 提升至 99%,而分析效率也因此提高了 30%。
Our success in implementing a robust data quality system.

資料品質是一個持續改進的目標,未來我們將完備資料品質的監控系統,實時關注資料的變化與品質,確保任何異常能夠被及時發現和處理;同時隨著數據隱私和安全的重要性日益提升,我們也將進一步加強數據安全控管,保護用戶隱私。

我們期待這些未來的進步能夠使 Tomofun 的資料基礎建設更加穩健,成為成功之路上強有力的後盾。

--

--

Tomofun Tech Blog
Tomofun Tech Blog

Published in Tomofun Tech Blog

Tomofun 是全球首家實踐 AIoT 於產品 Furbo 寵物攝影機的寵物科技新創,Furbo 擁有來自 133 國的百萬用戶數、為Amazon 15國寵物類別銷售冠軍!國際化的百人團隊遍布歐美亞多國,而核心開發團隊位於總部台灣。Tech Blog 讓你從 Tomofuners 視角,走入產品開發、尖端技術運用、新創開發文化等更多開發團隊的真實日常。