iT邦幫忙

2023 iThome 鐵人賽

DAY 24
1

如何建立一個好的 ETL 流程?

大家安安,雖然說已經介紹過 ETL 了,但我覺得可以和大家談談什麼是好的 ETL 流程,以及我們該如何建立一個好的 ETL 流程,當然好不好這件事有點主觀,我會以我自己的觀點作分析,介紹一些相對好的做法。

先複習一下,什麼是 ETL?

https://ithelp.ithome.com.tw/upload/images/20230930/201625457Rq7xpwiVO.png

ETL (Extract, Transform, Load) 是一種資料處理過程,主要用於從各種資料源抽取資料 (Extract)、將資轉換為需要的格式 (Transform),然後載入到目標資料庫或資料倉儲 (Load)。
設計良好的 ETL 流程可以確保資料的準確性、完整性和一致性,並且可以有效地處理大量資料。
現在市面上其實有很多 ETL 工具可以直接使用,或許不用自己開發就可以搭建出很高效的 ETL 流程。

所以說該如何做呢?

開發前的設計

在設計 Data Pipeline/ETL 系統時,通常需要注意以下四點:

  1. 資料延遲性
    從收到資料到處理資料需要多久時間、可以容忍多久的延遲?這會影響到資料需要做即時處理還是可以接受定時的批次處理。如果今天要做的資料分析只需要昨天的資料,那就不用那麼趕著推送資料,可以一天整合一兩次就好。
  2. 資料精準性
    在計算資料時,需要到多精準?例如營收的金額必須要非常精準,因為關係到錢,不精準老闆會氣氣氣。如果像是推文的按讚數或是現在有多少人在線上,就可以有誤差的容忍度。
    (要估算多少人在線上或是做任何數字的估計,可以參考 HyperLogLog 演算法,或是我明天寫一篇介紹它)
  3. 系統的高可用性
    高可用性是為了確保這些原始資料能夠儘早落地,後面才能安心做後續的資料清洗或計算等動作。
  4. 其他維運面考量
    如果有導入自動化的維運工具,會讓系統維運更輕鬆 (廢話)。
    異常活動的監控、系統的回溯性和系統的可擴充性都必須在維運面進行設計上的考量。

開發中

在 Data Pipeline 中會有很多支 ETL 程式,而開發一個新的 ETL 就和其他的程式開發一樣,會有固定且獨立的開發流程:

  1. 設計原型
    在開發前應該要先根據上面提到的四點來確認這個 ETL 要如何設計以及需求為何,還有最重要的,這些資料在清理之後是有用的嗎?沒用就不要做了,浪費力氣和資源。
  2. 變數設置
    通常 ETL 的變數設置會有
    1. Source : 來自哪個資料源、連到這些資料源的權限設定
    2. Objects : 設定資料源來的資料要怎麼進行清理。
    3. Destination : 要將清理後的資料丟到哪個資料庫或資料倉儲,以及目標資料庫的權限設定。
  3. 測試
    測試很重要,除了基本的單元測試外,還要做完整的整合測試,因為整個 Data Pipeline 是由多個 ETL 程式組成的。
  4. 佈署
    在佈署程式前我會先推到測試伺服器 (Stage Server) 進行內測,確定沒問題在佈署到正式區 (Production Server) 上。
  5. 佈署後的監控
    監控取決於你用什麼自動化工具,通常都會有很方便的監控工具,可以把最即時的異常活動直接推到你們的 Slack Chanel (或類似的服務)。

結論與閒話

ETL 技術是 Data Pipeline 中最基本的小程式,可以幫助我們將來自不同來源的資料整合到資料倉儲中,並保證資料的品質、一致性和效能。

順帶一提,我們公司先前有使用過 Hevo 來建立 ETL 程式,我自己覺得蠻直覺的,這類的工具可以讓你的開發過程更簡化,簡化的部分在於環境的設定不用那麼複雜,只需要設定權限 token 就可以串好整個流程,也可以直接在網頁上進行資料清理的程式碼撰寫,很方便。

https://ithelp.ithome.com.tw/upload/images/20231009/20162545l9zknPHpEL.png

我可以在網頁內只用四個步驟就建立好一個 ETL 程式,很方便吧~~
(Configure Source, Select Objects, Configure Destination and Final Settings)

https://ithelp.ithome.com.tw/upload/images/20231009/20162545KmiUS3t0x3.png

也可以在網頁中直接撰寫資料轉換與清理的程式碼 (Based on Python)

Hevo 也有提供免費仔額度,雖然免費版的功能和能連接到的資料源比較少,但我覺得很堪用!

我自己覺得比自己開發 ETL 還順手,市面上也有很多類似的工具,大家可以依照自己的喜好去選擇。


Reference :

Bryan Yang - Data Pipeline 101(一) — 什麼是 Data Pipeline
Bryan Yang - Data Pipeline 101(四) — 管線系統設計與開發 — 功能面
Bryan Yang - Data Pipeline 101(八) — ETL Job 開發流程
Hevo
Hevo - Pipeline


上一篇
Day 23 : What?蝦米是 CRM (Customer Relationship Management)?
下一篇
Day 25 : 什麼是資料清洗 (Data Cleaning)?四個不可不知的清洗重點
系列文
從 IT 的視角觀看公司內部的系統管理及設計30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言