airflow 進行後端大數據中ETL處理(草稿)

情境說明:

公司接了外部的數據源,要把資料同步到gcp雲端來,資料表很多 ,我們使用了多種方式把資料寫入到我們公司位於gcp上的bigquery 資料表

問題

資料表很多樣,不同的資料表有不同的ETL處理方式,例如「訂單」資料表是append only的,我們要從gcs上讀取檔案,轉化後寫到bigquery資料表。

而「優惠卷」資料表則必須從bigquery上某一個資料表(如下圖)進行撈取的動作,然後跟據新增或修改、刪除類型的資料,對另一個也是在bigquery上的資料表進行維護的動作。

思考

把所有各式各樣的ETL作業都寫在同一個程式進行處理很顯然是不合理的,第一,沒辦法分工。第二,當出現問題時,很難除錯。

另一個問題隨著思考的深入也開始浮現出來。某一些工作必須在另一個工作做完之後接著做。若上游的工作失敗了,下游的工作就不接著執行。
上述問題如果你是用寫死每天幾點作業的方式,除了上下游工作有空檔,浪費等待時間之外,下游工作是完全沒辦法"感知"上游工作是否真正作業成功的。

airflow完全可以解決這個問題

本文不打算介紹airflow的安裝方式,你可以自已上網找到不少文件
本文在這邊分享一些經驗

優點

除了airflow安裝十分容易之外,airflow很顯然有以下幾個優點

  1. 工作之間的相依性
  2. 流程以程式的方式被記錄下來,可以進入版控
  3. 圖型化的網頁介面,方便記憶完整流程
  4. 方便查log

工作之間的相依性

如上面所述,如果你用排程設定時間,一兩個工作還好,如果上下游工作有不少個,無謂的等待就太浪費時間了。此外,傳統的方式你也很難在兩個工作之間傳送訊息。而用了airflow之後,除了沒有等待時間之外,每個工作執行完都可以馬上通知下一個工作進行處理。而且還可以透過xcom在兩個工作之間傳送訊息,十分方便。

流程以程式碼的方式被記錄下來,可以進入版控

如下圖,我們看到最後一行,extract1 >> update,代表extract1完後接著updatte,只要簡單將這個py檔放到版控處理,不管中間經過幾位工程師之手,若發生失敗,你都可以透過版控查詢失敗的程式碼,來進行相應的處理(例如回復成上一版)

bigquery operator

airflow對gcp 十分友善,你可以透過bigquery operator,直接一行程式碼就將bigquery 上的查詢寫入到另一個bq資料表

bash operator

bash operator的建構式有一個選項,若設為true,就會直接把最後一個輸出的結果寫入到xcom供下一個task使用,這非常實用 請看以下連結init的參數中xcom_push參數 airflow.apache.org/_modules/ba…

圖型化的網頁介面,方便管理,而且容易記憶完整流程

圖型顯示各個工作流之間的關係,除了方便管理,查工作執行的情況之外,而且容易記憶完整工作流,大數據的資料處理又多且雜,隨著時日久遠,有可能到最後演變到相關工程師都搞不清楚問題出在哪裏。
有了圖型化界面,我們可以快速的查看工作在每一天的執行情況,而且上下游關係也一目了然。這真的太美好了

转载于:https://juejin.im/post/5b812cf4f265da431d0e6c1a

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值