👾 Hi, 我是 Bevis 👾

我是一位0經驗轉職的新手工程師,關注資料工程、雲端工程、DevOps等領域。
我會分享我在開發上的經驗與心得,歡迎隨時關注!

Recent Posts

資料工程師轉職專題的挑戰與難點

有時候發現錯誤比做對更重要,因為對的時候不會知道自己是怎麼對的,但錯的時候一定會找出錯誤的原因。開發經驗的寶貴不只是學習新技術或工具,更重要的是不斷嘗試錯誤的經驗。本文會分享自己在開發轉職專題時遇到的困難與挑戰。(建議搭配建議搭配轉職專題介紹一同閱讀) 目錄 Airflow 挑戰(一):迴圈流程 Airflow 挑戰(二):SQLAlchemy相容性 Airflow 挑戰(三):參數傳遞 雲端架構:資安議題 結語 Airflow 挑戰(一):迴圈流程 這個問題發生在要將爬蟲程式轉換成Airflow的dag程式時遇到的。由於專題的資料涉及許多「縣市」、「行政區」、「店家類別」、「寵物類別」、「日期」等參數的變化,所以在起初撰寫爬蟲時,我使用了多個迴圈來處理這些參數,可以快速的掃過所有排列組合。例如: # 以日期作為啟動條件,接著搜尋所有城市與寵物類別的排列組合 while start < today: for city in city_list: for animal in animal_list: ## 爬蟲程式邏輯. ## 爬蟲程式邏輯.. ## 爬蟲程式邏輯... ## 且變數可以多次使用,例如存檔檔名 file_name = f"{start}_{city}_pet.csv" 這樣的寫法方便又快速,但是在編寫dag程式時卻行不通。原因如下: 在dag中是以函式作為pipeline的節點,如果要為完整流程設立節點,就必須將程式拆成多個函式。 但是迴圈本身是一個不可拆分的流程,一旦執行就是完整的一圈,無法把單次迴圈再切成上半和下半,也沒辦法切成前10圈和後10圈。 所以如果要在dag中使用迴圈,那整個迴圈就只會有一個節點。這樣的問題是:如果中途出錯了就必須從第一圈重跑,這就失去了Airflow錯誤重試的特點。 解決方法 我的解法意外的單純:放棄迴圈,改為各自獨立的流程。Airflow是支援平行處理的,所以可以將原本的每一圈都獨立成單獨的流程,當所有流程都完成,再將資料合併成一個檔案或DataFrame做後續處理。有兩種寫法可以達到相同的效果: 寫法一:土法煉鋼 data_NTP_dog = S_create_post_data(dict_name=data_dict_NTP, ani="0") data_NTP_cat = S_create_post_data(dict_name=data_dict_NTP, ani="1") data_TPE_dog = S_create_post_data(dict_name=data_dict_TPE, ani="0") data_TPE_cat = S_create_post_data(dict_name=data_dict_TPE, ani="1") data_TYN_dog = S_create_post_data(dict_name=data_dict_TYN, ani="0") data_TYN_cat = S_create_post_data(dict_name=data_dict_TYN, ani="1") data_TCH_dog = S_create_post_data(dict_name=data_dict_TCH, ani="0") data_TCH_cat = S_create_post_data(dict_name=data_dict_TCH, ani="1") data_TNA_dog = S_create_post_data(dict_name=data_dict_TNA, ani="0") data_TNA_cat = S_create_post_data(dict_name=data_dict_TNA, ani="1") data_KSH_dog = S_create_post_data(dict_name=data_dict_KSH, ani="0") data_KSH_cat = S_create_post_data(dict_name=data_dict_KSH, ani="1") 上述的寫法簡單粗暴,就是將程式碼重複編寫,只是帶入不同參數,好處是不會有什麼問題,只是寫好後最好再次檢查,如果用複製貼上容易有漏換的參數。另一個缺點是看起來冗長,視覺化流程圖也會看起來很龐大複雜。

資料工程師轉職專題:六都寵物資源分析開發實錄

這是我在參加資料工程師轉職培訓班時開發的專題作品,我的小組一共有五人,剛好大致可分為「資料工程組」3人、「資料分析組」2人,而我就是專注在資料工程方面的開發。經過三個月的學習與開發,這個專題已經趨於完成,所以撰寫此文記錄開發的過程,並分享一些心得給或許也計劃要轉職的夥伴。 目錄 專題簡介 (Project Overview) 技術選型 (Technical Stack) 技術架構 (Architecture Diagram) 爬蟲 & ETL:資料獲取與挑戰 Airflow 自動化 雲端部署:VM、Docker 與 CI/CD 結語 專題概覽與技術選型 1. 專題簡介 (Project Overview) 本專題的最終目的是「分析六都寵物資源的分布情形」,而作為資料工程師的任務就是找到資料滿足這項需求,並且要能夠自動化運行。 2. 技術選型 (Technical Stack) 以下是我們選擇的工具和技術。 類別 工具/技術 程式語言 Python 資料庫 MySQL 雲服務 GCP 自動化 Airflow CI/CD GitHub Action 部署 Docker 資料管線架構與實作 3. 技術架構 (Architecture Diagram) 以下是本專題的技術架構圖,這是一個典型資料管線 資料擷取 (Extraction): 透過 Python 程式爬取資料,存入 Data Lake (GCS 及 VM 硬碟)。 資料轉換 (Transform): 使用 Python 的 Pandas 進行資料清洗與格式統一。 資料儲存 (Loading): 將清洗後的資料存入 Data Warehouse (MySQL)。 分析與呈現: 後續分析皆來自 MySQL,最終使用 Tableau 進行視覺化呈現。 4. 爬蟲 & ETL:資料獲取與挑戰 我們資料爬取方式主要有兩種: