Airflow用于ETL的四種基本運行模式, 2022-11-20

(2022.11.20 Sun)
基本運行模式(pattern)是data pipeline使用Airflow的DAG的不同結(jié)構(gòu)焙蚓,基本模式有如下四種 :

  • 序列Sequence
  • 平行拆分Parallel split
  • 同步Synchronisation
  • 單選Exclusive choice

序列模式

序列模式即若干task按先后順序依次執(zhí)行糙麦,在運行代碼上 表示為task_1 >> task_2 >> ...译隘。

dag = DAG(
    dag_id='sequential_pattern',
    default_args={ 
        'start_date': utils.dates.days_ago(1),
    },
    schedule_interval=None,
)

with dag:
    read_input = DummyOperator(task_id='read_input')

    aggregate_data = DummyOperator(task_id='generate_data')

    write_to_redshift = DummyOperator(task_id='write_to_redshift')

    read_input >> aggregate_data >> write_to_redshift

Parallel split

parallel split

parallel split模式用于在分支的情況粗恢。比如當(dāng)數(shù)據(jù)集備好之后,需要被加載進(jìn)入多個不同的tasks片酝,且都是同一個pipeline中囚衔,如同數(shù)據(jù)進(jìn)入不同的分支。

分支在DAG中的表示為task_1 >> [task_2, task_3]
案例如

dag = DAG(
    dag_id='pattern_parallel_split',
    default_args={
        'start_date': utils.dates.days_ago(1),
    },
    schedule_interval=None,
)

with dag:
    read_input = DummyOperator(task_id='read_input')

    aggregate_data = DummyOperator(task_id='generate_data')

    convert_to_parquet = DummyOperator(task_id='convert_to_parquet')

    convert_to_avro = DummyOperator(task_id='convert_to_avro')

    read_input >> aggregate_data >> [convert_to_parquet, convert_to_avro]

Sychronisation

與parallel split相似雕沿,在同步模式中练湿,不同branch的結(jié)果匯聚(reconciliation)在一個task中,不同的branch執(zhí)行并行計算审轮,并將結(jié)果整合肥哎。


synchronization

DAG的代碼表達(dá)中,同步模式可拆解為在每個for loop中執(zhí)行順序模式疾渣,即

for xx in xxx:
    task_0 >> task_i >> task_2

代碼實例

dag = DAG(
    dag_id='pattern_synchronization',
    default_args={
        'start_date': utils.dates.days_ago(1),
    },
    schedule_interval=None,
)

with dag:
    convert_to_parquet = DummyOperator(task_id='convert_to_parquet')
    for hour in range(0, 24):
        read_input = DummyOperator(task_id='read_input_hour_{}'.format(hour))

        aggregate_data = DummyOperator(task_id='generate_data_hour_{}'.format(hour))

        read_input >> aggregate_data >> convert_to_parquet

單選

根據(jù)預(yù)先設(shè)定的條件篡诽,在分支部分選擇不同的task執(zhí)行。


exclusive choice

在Apache Airflow中稳衬,可通過BranchOpertor對象執(zhí)行分支單選命令霞捡。BranchOperator對象指定的方法,其返回值可用于指定對分支的選擇薄疚,而task_id用于標(biāo)識分支的名字碧信。參考如下案例。

dag = DAG(
    dag_id='pattern_exclusive_choice',
    default_args={
        'start_date': utils.dates.days_ago(1),
    },
    schedule_interval=None,
)

with dag:
    def route_task():
        execution_date = context['execution_date']
        return 'convert_to_parquet'if execution_date.minute % 2 == 0 else 'convert_to_avro'
 

    read_input = DummyOperator(task_id='read_input')

    aggregate_data = DummyOperator(task_id='generate_data')

    route_to_format = BranchPythonOperator(task_id='route_to_format', python_callable=route_task)

    convert_to_parquet = DummyOperator(task_id='convert_to_parquet')

    convert_to_avro = DummyOperator(task_id='convert_to_avro')

    read_input >> aggregate_data >> route_to_format >> [convert_to_parquet, convert_to_avro]

Reference

1 ETL data patterns with Apache Airflow, waitingforcode, by BARTOSZ KONIECZNY

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末街夭,一起剝皮案震驚了整個濱河市砰碴,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌板丽,老刑警劉巖呈枉,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異埃碱,居然都是意外死亡猖辫,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進(jìn)店門砚殿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來啃憎,“玉大人,你說我怎么就攤上這事似炎⌒疗迹” “怎么了悯姊?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長贩毕。 經(jīng)常有香客問我悯许,道長,這世上最難降的妖魔是什么辉阶? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任先壕,我火速辦了婚禮,結(jié)果婚禮上睛藻,老公的妹妹穿的比我還像新娘启上。我一直安慰自己,他們只是感情好店印,可當(dāng)我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著倒慧,像睡著了一般按摘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上纫谅,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天炫贤,我揣著相機與錄音,去河邊找鬼付秕。 笑死兰珍,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的询吴。 我是一名探鬼主播掠河,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼猛计!你這毒婦竟也來了唠摹?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤奉瘤,失蹤者是張志新(化名)和其女友劉穎勾拉,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體盗温,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡藕赞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了卖局。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片斧蜕。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖吼驶,靈堂內(nèi)的尸體忽然破棺而出惩激,到底是詐尸還是另有隱情店煞,我是刑警寧澤,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布风钻,位于F島的核電站顷蟀,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏骡技。R本人自食惡果不足惜鸣个,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望布朦。 院中可真熱鬧囤萤,春花似錦、人聲如沸是趴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽唆途。三九已至富雅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間肛搬,已是汗流浹背没佑。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留温赔,地道東北人蛤奢。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像陶贼,于是被迫代替她去往敵國和親啤贩。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內(nèi)容