好,系列正式開始。不過我們還沒有要立刻寫程式。
在開始寫 Python、PostgreSQL、dbt、Airflow、Docker 之前,我想先花一篇文章把這張「地圖」建立起來。否則很容易像過去的我一樣,每個工具都學了一點,卻不知道它們為什麼會出現在同一個專案裡。上一篇<簡介>提到,這 30 天我們要從頭建立一個資料工程專案,最後完成一條可以實際運作的 Data Pipeline。首先...
我們每天都在產生大量資料,搭捷運會產生進出站紀錄,網路購物會留下訂單與付款資訊,打開 App 也可能產生操作事件。問題是資料被產生,不代表資料已經可以直接被使用。假設今天拿到一份原始資料,後續可能還需要經過資料擷取、儲存、處理、轉換與品質檢查,最後才能穩定地提供給其他使用者或系統。
簡化之後,大概可以想成:
資料來源(Data Source)
↓
資料擷取(Ingestion)
↓
資料儲存(Storage)
↓
資料處理與轉換(Processing / Transformation)
↓
資料提供(Serving)
↓
BI / Data Analysis / Machine Learning / Application
而 Data Engineering 關注的,就是如何建立與維護這些資料系統,讓資料能夠可靠地從來源一路流向真正需要使用它的地方。這也是為什麼資料工程不只是「把 CSV 清乾淨」或「把資料塞進資料庫」。除了資料擷取、儲存與轉換之外,實際的資料工程還可能涉及資料品質、工作流程編排、系統可靠性、安全性、監控與軟體工程等問題。這個專案不會一次涵蓋資料工程的所有領域,我們會先聚焦在建立一條完整且可以實際執行的 Data Pipeline。我們可以把原始資料想成材料。有材料,不代表馬上就能拿來使用。假設今天分析人員需要每天查看資料,他當然可以每天自己下載 CSV、整理格式、檢查資料,再重新執行分析。一天可能沒什麼問題。但如果資料每天更新呢?
每天都要重新上面那些步驟。如果全部依賴人工操作,不只浪費時間,也很容易因為某個步驟漏掉、資料格式改變或執行失敗,導致後續拿到錯誤或不完整的資料。所以資料工程真正想解決的問題是:「我能不能建立一套流程,讓資料持續進來之後,都能按照預期被處理並提供給下游使用?」這時候,我們就需要 Data Pipeline。
Pipeline 本身就是「管線」。資料從一端進來,經過不同的處理步驟,再從另一端產生我們需要的結果。例如我們這次的捷運資料,可以先非常簡化地想成:
臺北捷運開放資料
↓
取得資料
↓
檢查與處理
↓
儲存資料
↓
轉換成需要的資料模型
↓
提供下游使用
如果只是手動執行一次,當然不一定需要建立一整套 Pipeline(我們還是需要考量到效益)。但是當資料會持續更新、處理步驟開始增加,而且不同步驟之間存在先後依賴時,我們就會希望把這些步驟建立成一套可以重複執行、管理與驗證的資料流程。這就是接下來 30 天我們真正要做的事情。
在開始處理資料以前,我們首先需要一個地方,好好放接下來會建立的程式碼、設定檔與專案文件。所以下一篇,我們終於可以真的打開 VS Code。
下一篇:Day 2|Stage 0(2/3):從零建立資料工程專案,先把專案架構和 Python 虛擬環境準備好