資料倉儲是什麼、為什麼、做什麼?
前言
我的第一份工作,從事的是產品設計及品牌策略。在設計顧問公司裡,我看見臺灣企業普遍面臨的挑戰:無論是具備產品開發實力的製造業者,投入品牌與數位轉型,期望提升品牌聲量和生產效率,以持續創造差異;或是擁有技術研發能力的科技業者,積極尋找需求缺口,期望開發出顛覆產業的創新產品。
參與專案的過程中,我發現,企業欣賞設計顧問在探究人性需求與意義創新的能力,卻也期待顧問以商業思維作為溝通的橋樑,協助經營團隊評估與決策。2020年,我抱著這份觀察,踏入陌生的資料領域,期待培養數據思維及分析技能,強化自己商業溝通的能力。
當時,我是以【數據管理分析專員】入職,實際接觸工作內容、閱讀許多相關文章後,我發現自己所從事的工作更貼近普遍對於【資料工程師】的認知。透過這篇文章,我想分享自己對於資料工程與資料倉儲(我當時的工作核心)的理解,其中如有錯誤,還請不吝指教!🥹
大綱
- 資料工程|為什麼?是什麼?
- 資料倉儲|是什麼?為什麼?做什麼?
資料工程-為什麼?
資料工程的目的,在於讓資料便於應用 — 無論是取得資料、分析資料、機器學習,而最終極的應用就是AI。
當許多創業家、經營者積極發想AI的應用場景,更多時候,企業其實沒有直接應用AI的根基。呼應 Maslow 的需求層次理論,資料科學家 Monica Rogati 曾經提出 AI 的需求層次理論,呼籲企業在決定導入AI之前,先了解其背後有多少基礎工程必須完成。對我來說,這是個非常直觀的比喻,也道出資料工程的不可或缺:
Think of AI as the top of a pyramid of needs. Yes, self-actualization (AI) is great, but you first need food, water and shelter (data literacy, collection and infrastructure).
資料工程-是什麼?
Data engineering is the process of designing and building systems that let people collect and analyze raw data from multiple sources and formats. These systems empower people to find practical applications of the data, which businesses can use to thrive.
— Dremio|Introduction to Data Engineering
從上述定義可以發現,資料工程有以下任務,分別運用不同的領域知識:
- 設計及開發系統 → 軟體工程(software engineering)
- 協助收集資料 → 資料倉儲(data warehousing)
- 協助分析資料 → 商業智慧(business intelligence)
這與 Airflow 設計者 Maxime Beauchemin 對於資料工程的想法不謀而合:
In relation to previously existing roles, the data engineering field could be thought of as a superset of business intelligence and data warehousing that brings more elements from software engineering.
資料倉儲-是什麼?
如同零售業,倉儲是囤放民生消費品的地方,資料倉儲將分散各處的資料,依照一致的篩選、處理原則加以轉換後,整合儲存到一個大型的資料庫中。
A subject-oriented, integrated, time-variant and non-volatile collection of data in support of management’s decision making process.
— William H. Inmon
資料倉儲(Data Warehouse,DW)是1990年,由倉儲之父 William H. Inmon 所創造的新名詞。其定義指出倉儲的四個重要特性:
- 主題導向(subject-oriented):資料倉儲依資料分析的主題有所分類,因應使用者的需求而有所不同。
- 整合(integrated):資料倉儲包含各式各樣的資料來源,經由資料的轉換與清潔作業,保持數值單位、資料格式、命名規則的一致性。
- 隨時間變化(time-variant):資料倉儲著眼於資料長時間的歷史變化,因此資料的儲存包含時間維度,以便進行長期趨勢分析。
- 不易變動(non-volatile):資料在匯入資料倉儲前,會經過適度處理,此後不再變動,以保持資料邏輯一致,同時避免溝通落差或錯誤。
資料倉儲-為什麼?
以資料庫(而非資料倉儲)為基礎的系統,因為應用的目標相對單純、明確,在確定使用需求後,多務求短期、即時資料的增刪查改。
這類型系統所收取的資料範圍較小、內容較詳細、同質性較高,加上資料即時、經常異動的特性,常採用高度正規化的資料結構,因此不利於跨資料庫的整合,也難以執行長期資料的分析。
相對的,資料倉儲的目標在於提供長期、多維度的資料查詢與分析,因此多以資料分析主題為導向,提供橫跨多個領域的相關資料。
經由篩選、轉換及清理的資料,除了有利於擴充新資料,就分析而言,資料更一致、完整且易用,為商業分析師、資料科學家省去不少前置作業的工時!
資料倉儲-做什麼?
ETL
前面不斷提到資料收入資料倉儲的流程,在資料領域裡,這個流程有個共通的名字稱為ETL,代表 Extract、Transform、Load。這三個動詞說明了系統之間獲取資料的步驟,是設計資料管道(data pipeline)的藍圖。
- Extract(擷取):這是我們從資料源取得資料,準備進行資料轉換前的步驟。過程中會透過 sensor 等待並檢測來源資料。
- Transform(轉換):我們會在這個階段加入業務邏輯,將資料進行過濾、分類、加總等處理,使資料易於分析。這個步驟十分仰賴產業知識。
- Load(載入):最後,我們會將處理過的資料儲存至資料倉儲。傳輸完成後,資料便可使用、分析,或成為其他系統的資料源,接續下一個ETL。
因應資料量、資料邏輯、運算能力等不同,也有系統採用ELT,而非ETL。
資料整合(Data Integration)
感謝前輩們的照顧,我很幸運能夠參與到資料倉儲重構的過程。🧚🏻
對於資料倉儲而言,提升資料的價值是我們的任務,如何提升資料的一致性、完整性和易用性,是整個重構過程中,我們不斷在思考的問題。以下是我認為,擔負資料倉儲管理責任所需具備的能力:
- 跨部門溝通的能力與耐心:釐清資料定義與邏輯、了解自主分析的情境及需求等,這部分的工作在於了解資料的全貌,作為後續決策的依據。在溝通方面,有時也需要重新定義問題的能力,以獲得更完整的資訊。
- 資料庫管理的知識與經驗:資料庫或索引(index)的設定、如何驗證及處理資料、如何優化資料庫的效能,觀察身旁優秀的前輩,大多具有高度好奇心,願意讀官方文件,並累積實作經驗,才能有理有據地做出判斷。
- 綜觀並選擇最適合的方式:雖然有所謂的最佳實踐(best practice),但任何系統開發的目標、條件、環境都不相同,自然不可能有標準答案。盡可能看清楚自己的條件,從失敗中學習,終將找到最適合的方式。
資料服務(Services)
在實際接觸工作之前,我以為資料工程與軟體開發離得很遠。而後我才理解,資料工程師的工作並不止於照顧好資料的品質,更包含服務商業分析師、資料科學家或其他單位的資料工程師等。
像是開發API、異常監測、元資料(metadata)管理,或是將任何手動執行的工作化為自動,都是服務的一環。考量長期價值,無論是減少技術債或增進作業效率,都可能是值得資料工程師投入設計、開發的服務。
誠如前面提及,資料工程的技能點也包含軟體工程,資料工程師必須持續高度掌握各種工具、平台、套件,了解它們的屬性、使用情境、差異,從而在設計服務時,能夠兼顧願景及現實條件,選用合適的技術做開發。
以上是我擔任資料工程師的經驗與學習心得,僅此記錄與分享,如有任何想法,歡迎一起討論!🙂
參考資料
- 黃舒郁、謝銘智、蕭釧瑛、林永青
《淺談資料倉儲》(中興工程季刊.第109期.2010年10月) - Maxime Beauchemin
The Rise of the Data Engineer(Medium,2017)
The Downfall of the Data Engineer(Medium,2017) - Monica Rogati
The AI Hierarchy of Needs(Medium,2017) - Vineet Goel
Why Robinhood uses Airflow(Medium,2017) - Robert Chang
A Beginner’s Guide to Data Engineering — Part I(Medium,2018)