這篇文章的目的,是讓技術小白也能理解 ETL Scheduling 的概念。
ETL 是什麼?
首先,先來簡短認識一下 ETL 是什麼。ETL 由 Extract(從來源端擷取資料)、Transform(將擷取後的資料轉換成合適的格式)、Load(將轉換後的格式放進目的位置)所組成。在進行 ETL 時,每個任務之間有先著後順序和彼此之間的依賴關係。
再接下去介紹 ETL scheduling 之前,先來一段故事。
找房子的故事
滴哥和同住的妹妹感情非常好,但最近因為常被鄰居誤會會和妹妹一起洗澡而頗為困擾,所以決定狠下心來搬去外面自己租屋。
(Photo by Jon'Nathon Stebbe on Unsplash)
為了找到好房子,滴哥最近每天都花好多時間在瀏覽臉書租屋社團的資訊,但臉書有好幾個類似的社團,社團裡有求租貼文、也有租屋貼文,而且很多房東都只租給女生,加上發文的格式又不太統一,導致滴哥常看得眼花撩亂又找不到可以租的房子,因此他決定花十塊錢請妹妹幫忙整理。他請妹妹做的事情如下:
- 到 8 個臉書租屋社團去挑出男性可租的租屋貼文來看
- 從貼文中ㄧㄧ辨認出照片、格局類型、樓層、位置、聯絡電話、備註等資訊,並轉成特定的格式(例如位於 5 樓公寓中的 5 樓,是頂樓加蓋,就要在樓層欄位寫 5F加蓋/5F)
- 把以上資訊依照格式填入哥哥指定的 excel 表格中
注意到了嗎,以上三個步驟分別就是 Extract(擷取)、Transform(轉換)、Load(放到目的地)。那妹妹做得如何呢?妹妹一口氣花了三天,整理出了 87 筆租屋資訊,這十塊錢花得真是值得。
• • •
三天後滴哥拿到了滴妹整理好的資訊,卻發現了一些問題。
首先是租房訊息更新得非常快,每個小時都有人在 po 出新的租屋資訊,而且那些位置好、條件好的搶手房子,po 出的一兩天甚至幾小時內,就有人馬上下訂。因此在妹妹交到滴哥手上的資訊中,很多房子都已租出了。
再來是妹妹在整理到第三天時,已經筋疲力盡,因此在表格中出現了許多快睡著時輸入的亂碼、甚至還有些資料不符合男性可租的條件。
改變策略:定時定量更新資訊
因此,滴哥決定改變策略,每天安排早上 9 點、下午 3 點與晚上 8 點三個時段,請妹妹各收集 10 筆資料,這樣滴哥就可以獲得最新的即時資訊,妹妹也不會因為一次處理太多資料而出現當機狀況。
按照新策略執行下來,果真順利許多,滴哥根據滴妹搜集的資訊,即時、準確地拿到了最新的租屋消息,據說ㄧ週內就找到了理想的住所。
找房子的故事與 ETL Scheduling 的關係
還記得滴哥遇到的兩個問題嗎?
- 租屋的資訊更新很快,而滴哥必須掌握最新的資訊。
- 一次讓妹妹處理太大量的資料,速度很慢、又會出現很多非預期的錯誤。
因此,滴哥決定定期、定量地去處理持續更新的來源資料。
實務上在使用 ETL 處理資料時,概念也是類似的。
- 如果想要處理的來源資料是會不斷更新的資料,就需要安排固定的時間來重新進行 ETL 的程序,擷取新的資料、轉換資料格式並置入,才能讓使用者獲得最新的資料。
- 當一次處理龐大資料時,可能會讓處理時間太久,也很容易出現非預期的失誤,這時也需要定期、定量地執行 ETL,來讓資料能穩定輸出。
而這樣定期、定量地執行 ETL 的程序,就叫做 ETL Scheduling。
小結
這篇文章以找房子為比喻,介紹了 ETL 與 ETL scheduling 的觀念。
當然,故事和實際狀況還是有些不一樣的地方。故事裡執行 ETL 的是妹妹,實際則會使用程式來執行,並利用程式來排定處理資料的時程。
ETL scheduling 也會碰到一些問題,例如讓程式自動定期處理資料,卻在過程中遇到網路突然斷掉、來源資料出了異動等等預料之外的狀況,這樣還必須花時間去 debug 找出是哪裡出了錯誤。現在也有相對應的工具如 Airflow 可以妥善解決這樣的狀況,然而這就不是這一篇要討論的問題了,之後有機會再來分享 :)
• • •
參考資料:
Airflow 於 ETL 的初步應用 – PyCon Taiwan 2020 其中關於 ETL scheduling 的部分