最近在使用Airflow來做ETL,但是發現Airflow在設定時間有一些坑,網路上也很難查到相關資料,研究了好久終於可以用了, 來記錄一下這次採坑的過程。
第一種情況: 更改scheduler_interval
在網路上的教學會查到通常會教你用以下的程式碼來跑airflow:
airflow在Scheduler欄位就會顯示1 day, 0:00:00
以天為頻率去執行這個任務,那假如我今天希望更改這個任務的執行頻率的時候,一定是想說執行在schedule_interval
那邊直接更改 @daily
變成 @hourly
,當你去做這樣的事情時就會發現airflow根本沒改(可以自己試試看,記得要重啟airflow scheduler)。原因就在於schedule_interval
不該放在default_args
那邊,而是要放在DAG的參數裡,這樣airflow才會更改執行頻率。
把default_args放到DAG的參數裡,就可以改變執行任務的頻率
可以看到執行任務的頻率從1 day, 0:00:00
變成了@hourly
情況二: 更改start_date
在使用airflow的時候會遇到一種情況是你想要去改這個Dag執行的時間,但是你直接改airflow仍然會執行舊的時間,情況如下:
跟情境一的code一樣,首先我們啟動DAG去觀察執行的時間,執行時間是2021-09-17, 00:00:00
如果我們今天要改成每天早上2點執行,直接改start_date
,然後輸入指令airflow db reset
,清空資料庫,我們看看結果會怎樣
依然在2021-09-17, 00:00:00
執行任務,並沒有因為改了start_date
就改變執行任務的時間,為什麼呢?因為airflow看start_date
的時候只會看到日不會到小時,所以不管你怎麼改,他對會維持在00:00:00
,那要怎麼辦呢?這時候就要去改schedule_interval
,用crontab的表示法去表示要執行的時間。
修改如下,將@Daily
改成0 2 * * *
這種crontab的語法形式,然後輸入指令airflow db reset
,清空資料庫,重新執行就可以看到任務會從早上兩點開始了。
B.t.w 如果你想保留原本DAG的執行紀錄的話而且又想改變執行任務的時間或頻率,就要去更改DAG的名稱比如說將test_time
改成test_time_v1
這樣,這樣airflow才會從新的設定時間和頻率開始執行。
那以上就是關於Airflow採坑的紀錄,如果有什麼問題都可以在下面進行留言!!!如果喜歡我的文章可以幫我拍拍手哦~~~~