Airflow рдЗрдВрдЯрд░рд╡реНрдпреВ рдХреЗ рдмреЗрд╕рд┐рдХреНрд╕ рдФрд░ рдХреЛрд░ рдХреЙрдиреНрд╕реЗрдкреНрдЯ
рдЯреЗрдХреНрдирд┐рдХрд▓ рдЗрдВрдЯрд░рд╡реНрдпреВ рдореЗрдВ рдЗрдВрдЯрд░рд╡реНрдпреВрдЕрд░ рдЖрдорддреМрд░ рдкрд░ рдЖрд╕рд╛рди рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВтАФAirflow рдХреЗ рдлреНрд░реЗрдорд╡рд░реНрдХ рдФрд░ рдХреЛрд░ рдХреЙрдиреНрд╕реЗрдкреНрдЯ рдХреЗ рдмреЗрд╕рд┐рдХреНрд╕ рдкрд░тАФрдФрд░ рдлрд┐рд░ рдзреАрд░реЗ-рдзреАрд░реЗ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдФрд░ рддрдХрдиреАрдХреА рдкреНрд░рд╢реНрдиреЛрдВ рдХреА рдУрд░ рдмрдврд╝рддреЗ рд╣реИрдВред
рдЗрди рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рдЙрддреНрддрд░ рджреЗрддреЗ рд╕рдордп, рд╕рд┐рд░реНрдл рддрдХрдиреАрдХреА рд╡рд┐рд╡рд░рдг рд╣реА рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдпрд╣ рднреА рдмрддрд╛рдПрдВ рдХрд┐ рдпрд╣ рдбреЗрдЯрд╛ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рдФрд░/рдпрд╛ рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЬ рдбреЗрдЯрд╛ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рд╕реЗ рдХреИрд╕реЗ рдЬреБрдбрд╝рддрд╛ рд╣реИред
1. Apache Airflow рдХреНрдпрд╛ рд╣реИ? рдЗрд╕рдХрд╛ рд╕рдмрд╕реЗ рдЖрдо рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рд╣реЛрддрд╛ рд╣реИ?
рдЙрддреНрддрд░: Apache Airflow рдПрдХ рдУрдкрди-рд╕реЛрд░реНрд╕ рдбреЗрдЯрд╛ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди рдЯреВрд▓ рд╣реИ, рдЬреЛ Python рдХреА рдорджрдж рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░реИрдХреНрдЯрд┐рд╢рдирд░реНрд╕ рдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдордореИрдЯрд┐рдХрд▓реА рдбреЗрдЯрд╛ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИред Airflow рдХрд╛ рд╕рдмрд╕реЗ рдЖрдо рдЙрдкрдпреЛрдЧ рдбреЗрдЯрд╛ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рдЯреАрдореЛрдВ рджреНрд╡рд╛рд░рд╛ рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рдЗрдХреЛрд╕рд┐рд╕реНрдЯрдо рдХреЛ рдЗрдВрдЯреАрдЧреНрд░реЗрдЯ рдХрд░рдиреЗ рдФрд░ рдбреЗрдЯрд╛ рдХреЛ рдПрдХреНрд╕рдЯреНрд░реИрдХреНрдЯ, рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо рдФрд░ рд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред
рдФрд░ рдмрддрд╛рдЗрдП: Airflow Apache рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЗ рддрд╣рдд рдореЗрдВрдЯреЗрди рд╣реЛрддрд╛ рд╣реИ (рдЗрд╕реАрд▓рд┐рдП рдЗрд╕рдХреЗ рдЖрдЧреЗ тАЬApacheтАЭ рдЬреБрдбрд╝рд╛ рд╣реИ)ред
рдбреЗрдЯрд╛ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди рдЯреВрд▓ рдРрд╕реА рдХреНрд╖рдорддрд╛ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдХрдИ рд╕реНрд░реЛрддреЛрдВ рдФрд░ рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдПрдХ рдПрдХрд▓ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдореЗрдВ рдЗрдВрдЯреАрдЧреНрд░реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред
Airflow рдХреЛ рдЕрд▓рдЧ рдмрдирд╛рддрд╛ рд╣реИ рдЗрд╕рдХрд╛ Python рджреНрд╡рд╛рд░рд╛ рдбреЗрдЯрд╛ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛тАФрдЬреЛ рдРрд╕реА рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд┐рд▓рд┐рдЯреА рдФрд░ рдирд┐рдпрдВрддреНрд░рдг рджреЗрддрд╛ рд╣реИ рдЬреЛ рдЕрдиреНрдп рдбреЗрдЯрд╛ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди рдЯреВрд▓ рдЕрдХреНрд╕рд░ рдирд╣реАрдВ рджреЗрддреЗред Airflow рдореЗрдВ рдЗрдирдмрд┐рд▓реНрдЯ рдФрд░ рдкреНрд░реЛрд╡рд╛рдЗрдбрд░-рд╕рдкреЛрд░реНрдЯреЗрдб рдЯреВрд▓реНрд╕ рдХреА рдмрдбрд╝реА рд░реЗрдВрдЬ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдХрд┐рд╕реА рднреА рдЯреАрдо рдХреЗ рдбреЗрдЯрд╛ рд╕реНрдЯреИрдХ рдХреЛ рдЗрдВрдЯреАрдЧреНрд░реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдЕрдкрдиреЗ рдЦреБрдж рдХреЗ рдЯреВрд▓ рдбрд┐рдЬрд╛рдЗрди рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рднреАред
Airflow рд╕реЗ рд╢реБрд░реБрдЖрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рд╣реЗрддреБ рдпрд╣ DataCamp рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рджреЗрдЦреЗрдВ: Getting Started with Apache Airflowред рдпрджрд┐ рдЖрдк Airflow рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ рдФрд░ рдЧрд╣рд░рд╛рдИ рддрдХ рдЬрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ Introduction to Airflow рдХреЛрд░реНрд╕ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░реАрди рдЬрдЧрд╣ рд╣реИред
2. DAG рдХреНрдпрд╛ рд╣реИ?
рдЙрддреНрддрд░: DAG, рдпрд╛ directed-acyclic graph, рдЯрд╛рд╕реНрдХреНрд╕ рдФрд░ рдЙрдирдХреЗ рдмреАрдЪ рдХреЗ рд░рд┐рд╢реНрддреЛрдВ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╣реИред рдПрдХ DAG рдХреА рд╕реНрдкрд╖реНрдЯ рд╢реБрд░реБрдЖрдд рдФрд░ рдЕрдВрдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдЯрд╛рд╕реНрдХреНрд╕ рдХреЗ рдмреАрдЪ рдХреЛрдИ тАЬрд╕рд╛рдЗрдХрд┐рд▓тАЭ рдирд╣реАрдВ рд╣реЛрддреАред Airflow рдореЗрдВ тАЬDAGтАЭ рд╢рдмреНрдж рдЖрдо рд╣реИ рдФрд░ рдЗрд╕реЗ рд╕рд╛рдорд╛рдиреНрдпрддрдГ рдбреЗрдЯрд╛ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдордЭрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдФрд░ рдмрддрд╛рдЗрдП: рдпрд╣ рдереЛрдбрд╝рд╛ рдкреЗрдЪреАрджрд╛ рд╕рд╡рд╛рд▓ рд╣реИред рдЬрдм рдЗрдВрдЯрд░рд╡реНрдпреВрдЕрд░ рдпрд╣ рдкреВрдЫреЗ, рддреЛ DAG рдХреА рдФрдкрдЪрд╛рд░рд┐рдХ тАЬрдЧрдгрд┐рддреАрдптАЭ рдкрд░рд┐рднрд╛рд╖рд╛ рдФрд░ Airflow рдореЗрдВ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧтАФрджреЛрдиреЛрдВ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдирд╛ рдЬрд╝рд░реВрд░реА рд╣реИред DAGs рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддреЗ рд╕рдордп рд╡рд┐рдЬрд╝реБрдЕрд▓ рджреЗрдЦрдирд╛ рдорджрдж рдХрд░рддрд╛ рд╣реИред рдиреАрдЪреЗ рдкрд╣рд▓реА рдЫрд╡рд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ DAG рд╣реИтАФрдЗрд╕рдХреА рд╕реНрдкрд╖реНрдЯ рд╢реБрд░реБрдЖрдд рдФрд░ рдЕрдВрдд рд╣реИ рдФрд░ рдЯрд╛рд╕реНрдХреНрд╕ рдХреЗ рдмреАрдЪ рдХреЛрдИ рд╕рд╛рдЗрдХрд┐рд▓ рдирд╣реАрдВред

рдиреАрдЪреЗ рджрд┐рдЦреА рджреВрд╕рд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ DAG рдирд╣реАрдВ рд╣реИред рднрд▓реЗ рд╣реА рдПрдХ рд╕реНрдкрд╖реНрдЯ рд╕реНрдЯрд╛рд░реНрдЯ рдЯрд╛рд╕реНрдХ рд╣реИ, extract рдФрд░ validate рдЯрд╛рд╕реНрдХреНрд╕ рдХреЗ рдмреАрдЪ рдПрдХ рд╕рд╛рдЗрдХрд┐рд▓ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдХрд┐ load рдЯрд╛рд╕реНрдХ рдХрдм рдЯреНрд░рд┐рдЧрд░ рд╣реЛрдЧрд╛ред

3. рдПрдХ DAG рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рди рддреАрди рдкреИрд░рд╛рдореАрдЯрд░реЛрдВ рдХреА рдЬрд░реВрд░рдд рд╣реЛрддреА рд╣реИ?
рдЙрддреНрддрд░: DAG рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ID, start date рдФрд░ schedule interval рджреЗрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдФрд░ рдмрддрд╛рдЗрдП: ID DAG рдХреА рдпреВрдирд┐рдХ рдкрд╣рдЪрд╛рди рд╣реИ рдФрд░ рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдЫреЛрдЯрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реЛрддрд╛ рд╣реИ, рдЬреИрд╕реЗ "sample_da." Start date рд╡рд╣ рддрд╛рд░реАрдЦ рдФрд░ рд╕рдордп рд╣реИ рдЬрдм рдкрд╣рд▓реА рдмрд╛рд░ DAG рдЯреНрд░рд┐рдЧрд░ рд╣реЛрдЧрд╛ред
рдпрд╣ рдПрдХ рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рд╣реЛрддрд╛ рд╣реИ, рдпрд╛рдиреА рд╕рдЯреАрдХ рд╡рд░реНрд╖, рдорд╣реАрдирд╛, рджрд┐рди, рдШрдВрдЯрд╛ рдФрд░ рдорд┐рдирдЯ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред Schedule interval рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ DAG рдХрд┐рддрдиреА рдмрд╛рд░ рдЪрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПтАФрд╣рд░ рд╕рдкреНрддрд╛рд╣, рд╣рд░ рджрд┐рди, рд╣рд░ рдШрдВрдЯреЗ, рдпрд╛ рдХреБрдЫ рдХрд╕реНрдЯрдоред
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, DAG рдХреЛ dag_id "sample_dag" рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред datetime рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ datetime рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ start_date рдХреЛ 1 рдЬрдирд╡рд░реА, 2024, рд╕реБрдмрд╣ 9:00 рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ DAG рджреИрдирд┐рдХ (@daily) рдЪрд▓реЗрдЧрд╛ (рд╕реБрдмрд╣ 9:00 рдкрд░)ред рдФрд░ рдЕрдзрд┐рдХ рдХрд╕реНрдЯрдо рд╢реЗрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП cron expressions рдпрд╛ datetime рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ timedelta рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
with DAG(
dag_id="sample_dag",
start_date=datetime(year=2024, month=1, day=1, hour=9, minute=0),
schedule="@daily",
) as dag:
тАж
4. Airflow рдЯрд╛рд╕реНрдХ рдХреНрдпрд╛ рд╣реИ? Airflow рдЯрд╛рд╕реНрдХ рдХреЗ рддреАрди рдЙрджрд╛рд╣рд░рдг рджреАрдЬрд┐рдПред
рдЙрддреНрддрд░: Airflow рдЯрд╛рд╕реНрдХ Airflow рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рдХреА рд╕рдмрд╕реЗ рдЫреЛрдЯреА рдЗрдХрд╛рдИ рд╣реИред рдПрдХ рдЯрд╛рд╕реНрдХ рдЖрдорддреМрд░ рдкрд░ рдбреЗрдЯрд╛ рдкрд╛рдЗрдкрд▓рд╛рдЗрди (DAG) рдореЗрдВ рдПрдХ рдПрдХрд▓ рдСрдкрд░реЗрд╢рди рдХреЛ рд╕рдорд╛рд╣рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЯрд╛рд╕реНрдХреНрд╕ DAGs рдХреЗ рдирд┐рд░реНрдорд╛рдг рдЦрдВрдб рд╣реИрдВ, рдФрд░ рдПрдХ DAG рдХреЗ рднреАрддрд░ рдЯрд╛рд╕реНрдХреНрд╕ рдХреЗ рдмреАрдЪ рд░рд┐рд╢реНрддреЗ рддрдп рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдХрд┐рд╕ рдХреНрд░рдо рдореЗрдВ рдЪрд▓реЗрдВрдЧреЗред рддреАрди рдЙрджрд╛рд╣рд░рдг:
- рдХрд┐рд╕реА рд╕реНрд░реЛрдд рдкреНрд░рдгрд╛рд▓реА (рдЬреИрд╕реЗ API рдпрд╛ рдлреНрд▓реИрдЯ-рдлрд╛рдЗрд▓) рд╕реЗ рдбреЗрдЯрд╛ рдирд┐рдХрд╛рд▓рдирд╛
- рдбреЗрдЯрд╛ рдХреЛ рд╡рд╛рдВрдЫрд┐рдд рдореЙрдбрд▓ рдпрд╛ рдлрд╝реЙрд░реНрдореЗрдЯ рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо рдХрд░рдирд╛
- рдбреЗрдЯрд╛ рдХреЛ рдХрд┐рд╕реА рд╕реНрдЯреЛрд░реЗрдЬ рдЯреВрд▓ (рдЬреИрд╕реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдпрд╛ рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕) рдореЗрдВ рд▓реЛрдб рдХрд░рдирд╛
рдПрдХ ETL рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдореЗрдВ, рд░рд┐рд╢реНрддреЗ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛрдВрдЧреЗ:
- тАЬtransformтАЭ рдЯрд╛рд╕реНрдХ тАЬextractтАЭ рдЯрд╛рд╕реНрдХ рдХрд╛ рдбрд╛рдЙрдирд╕реНрдЯреНрд░реАрдо рд╣реИ, рдпрд╛рдиреА рдкрд╣рд▓реЗ тАЬextractтАЭ рд▓реЙрдЬрд┐рдХ рдЪрд▓рддрд╛ рд╣реИ
- тАЬloadтАЭ рдЯрд╛рд╕реНрдХ тАЬtransformтАЭ рдЯрд╛рд╕реНрдХ рдХрд╛ рдбрд╛рдЙрдирд╕реНрдЯреНрд░реАрдо рд╣реИред рдпрд╛рдиреА тАЬtransformтАЭ рдХреЗ рдмрд╛рдж тАЬloadтАЭ рдЪрд▓реЗрдЧрд╛
рдФрд░ рдмрддрд╛рдЗрдП: рдЯрд╛рд╕реНрдХреНрд╕ рдмрд╣реБрдд рдЬрдирд░рд▓ рднреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХрд╛рдлреА рдХрд╕реНрдЯрдо рднреАред Airflow рдЗрдиреНрд╣реЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ рджреЗрддрд╛ рд╣реИ: рдкрд╛рд░рдВрдкрд░рд┐рдХ рдСрдкрд░реЗрдЯрд░реНрд╕ рдФрд░ TaskFlow API (рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдЧреЗ)ред
рдУрдкрди-рд╕реЛрд░реНрд╕ рдХрд╛ рдПрдХ рд▓рд╛рдн рд╡реНрдпрд╛рдкрдХ рд╕рдореБрджрд╛рдп рдХрд╛ рдпреЛрдЧрджрд╛рди рд╣реИтАФрдЬрд┐рд╕рдореЗрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдХреЙрдиреНрдЯреНрд░рд┐рдмреНрдпреВрдЯрд░реНрд╕ рдХреЗ рд╕рд╛рде AWS, Databricks, Snowflake рдФрд░ рдмрд╣реБрдд рд╕реЗ рдЕрдиреНрдп рдЦрд┐рд▓рд╛рдбрд╝реА рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЬрд┐рд╕ рдЯрд╛рд╕реНрдХ рдХреЛ рдЖрдк рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрд╕рдХреЗ рд▓рд┐рдП Airflow рдСрдкрд░реЗрдЯрд░ рдкрд╣рд▓реЗ рд╕реЗ рдмрдирд╛ рд╣реЛред рдЕрдЧрд░ рдирд╣реАрдВ, рддреЛ рдЕрдкрдирд╛ рдмрдирд╛рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ SFTPToS3Operator, S3ToSnowflakeOperator, рдФрд░ DatabricksRunNowOperatorред
5. Airflow рдХреА рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рдХреЛрд░ рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕ рдХреНрдпрд╛ рд╣реИрдВ?
рдЙрддреНрддрд░: Airflow рдХреА рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рдЪрд╛рд░ рдХреЛрд░ рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕ рд╣реИрдВ: scheduler, executor, metadata database рдФрд░ webserverред
рдФрд░ рдмрддрд╛рдЗрдП: Scheduler рд╣рд░ рдорд┐рдирдЯ DAG рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ рдФрд░ DAGs рд╡ рдЯрд╛рд╕реНрдХреНрд╕ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рдкрд╣рдЪрд╛рдиреЗ рдХрд┐ рдХреМрди рд╕реЗ рдЯрд╛рд╕реНрдХ рдЯреНрд░рд┐рдЧрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред Executor рд╡рд╣ рд╕реНрдерд╛рди рд╣реИ рдЬрд╣рд╛рдВ рдЯрд╛рд╕реНрдХреНрд╕ рдЪрд▓рддреЗ рд╣реИрдВред рдЯрд╛рд╕реНрдХреНрд╕ рд▓реЛрдХрд▓реА (scheduler рдХреЗ рднреАрддрд░) рдпрд╛ рд░рд┐рдореЛрдЯрд▓реА (scheduler рдХреЗ рдмрд╛рд╣рд░) рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
Executor рдкрд░ рд╣реА рдкреНрд░рддреНрдпреЗрдХ рдЯрд╛рд╕реНрдХ рдХрд╛ рдХрдВрдкреНрдпреВрдЯреЗрд╢рдирд▓ тАЬрдХрд╛рдотАЭ рд╣реЛрддрд╛ рд╣реИред Metadata database рдореЗрдВ рдЪрд▓ рд░рд╣реЗ Airflow рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рдЬреБрдбрд╝реЗ DAGs рдФрд░ рдЯрд╛рд╕реНрдХреНрд╕ рдХреА рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИтАФрдЬреИрд╕реЗ рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рдирд┐рд╖реНрдкрд╛рджрди рд╡рд┐рд╡рд░рдг, рдХрдиреЗрдХреНрд╢рдВрд╕, рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдФрд░ рдЕрдиреНрдп рдмрд╣реБрдд рдХреБрдЫред
Webserver Airflow UI рдХреЛ рд░реЗрдВрдбрд░ рдФрд░ рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИтАФрдЬрдм рдЖрдк DAGs рд╡рд┐рдХрд╕рд┐рдд, рдЙрдкрдпреЛрдЧ рдФрд░ рдореЗрдВрдЯреЗрди рдХрд░рддреЗ рд╣реИрдВред
рдпрд╣ Airflow рдХреЗ рдХреЛрд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рд▓ рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕ рдХрд╛ рд╕рд┐рд░реНрдл рдПрдХ рддреНрд╡рд░рд┐рдд рдЕрд╡рд▓реЛрдХрди рд╣реИред
Airflow DAGs рдЗрдВрдЯрд░рд╡реНрдпреВ рдкреНрд░рд╢реНрди
рдЖрдкрдиреЗ рджрд┐рдЦрд╛ рджрд┐рдпрд╛ рдХрд┐ рдЖрдкрдХреЛ Airflow рдлреНрд░реЗрдорд╡рд░реНрдХ рдФрд░ рдЙрд╕рдХреА рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рдмреЗрд╕рд┐рдХреНрд╕ рдЖрддреЗ рд╣реИрдВред рдЕрдм, рдЖрдкрдХреА DAG рд▓рд┐рдЦрдиреЗ рдХреА рд╕рдордЭ рдХреА рдмрд╛рд░реА рд╣реИред
6. PythonOperator рдХреНрдпрд╛ рд╣реИ? рдЗрд╕ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ рдХреНрдпрд╛ рд╣реИрдВ? рдЖрдк рдХрдм PythonOperator рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗтАФрдПрдХ рдЙрджрд╛рд╣рд░рдг рджреАрдЬрд┐рдП?
рдЙрддреНрддрд░: PythonOperator рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдХрд┐рд╕реА Python рдлрд╝рдВрдХреНрд╢рди рдХреЛ Airflow рдЯрд╛рд╕реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИред рдЗрд╕ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА Python рдлрд╝рдВрдХреНрд╢рди рдХреЛ python_callable рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдЖрдк рдбреЗрдЯрд╛ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА API рдХреЛ рд╣рд┐рдЯ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВред
рдФрд░ рдмрддрд╛рдЗрдП: PythonOperator Airflow рдХреЗ рд╕рдмрд╕реЗ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдСрдкрд░реЗрдЯрд░реНрд╕ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдпрд╣ рди рд╕рд┐рд░реНрдл рдХрд╕реНрдЯрдо рдХреЛрдб рдХреЛ DAG рдХреЗ рднреАрддрд░ рдЪрд▓рд╛рдиреЗ рджреЗрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ XComs рдореЗрдВ рд▓рд┐рдЦрдХрд░ рдбрд╛рдЙрдирд╕реНрдЯреНрд░реАрдо рдЯрд╛рд╕реНрдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рднреА рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИред
op_kwargs рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдПрдХ dictionary рдкрд╛рд╕ рдХрд░рдХреЗ, рдЖрдк Python callable рдХреЛ рдХреАрд╡рд░реНрдб рдЖрд░реНрдЧреНрдпреБрдореЗрдВрдЯреНрд╕ рджреЗ рд╕рдХрддреЗ рд╣реИрдВтАФрдЬреЛ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдФрд░ рдЕрдзрд┐рдХ рдХрд╕реНрдЯрдорд╛рдЗрдЬреЗрд╢рди рдХреА рд╕реБрд╡рд┐рдзрд╛ рджреЗрддрд╛ рд╣реИред op_kwargs рдХреЗ рдЕрд▓рд╛рд╡рд╛ рднреА рдХрдИ рдкреИрд░рд╛рдореАрдЯрд░реНрд╕ рд╣реИрдВ рдЬреЛ PythonOperator рдХреА рдХреНрд╖рдорддрд╛ рдмрдврд╝рд╛рддреЗ рд╣реИрдВред
рдиреАрдЪреЗ PythonOperator рдХрд╛ рдПрдХ рд╕реИрдВрдкрд▓ рдХреЙрд▓ рд╣реИред рд╕рд╛рдорд╛рдиреНрдпрддрдГ, python_callable рдХреЛ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ Python рдлрд╝рдВрдХреНрд╢рди DAG рдкрд░рд┐рднрд╛рд╖рд╛ рд╡рд╛рд▓реА рдлрд╝рд╛рдЗрд▓ рдХреЗ рдмрд╛рд╣рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд▓рд┐рдП рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
def some_callable(name):
print("Hello ", name)
...
some_task = PythonOperator(
task_id="some_task",
python_callable=some_callable,
op_kwargs={"name": "Charles"}
)
7. рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рддреАрди рдЯрд╛рд╕реНрдХ рд╣реИрдВ рдФрд░ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдЪрд▓реЗрдВ, рддреЛ рдЖрдк рдЙрдирдХреЗ рдмреАрдЪ рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдХреИрд╕реЗ рд╕реЗрдЯ рдХрд░реЗрдВрдЧреЗ? рдХреМрди-рд╕рд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ?
рдЙрддреНрддрд░: рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдЖрдо рд╣реИ >> рдмрд┐рдЯ-рд╢рд┐рдлреНрдЯ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧред рджреВрд╕рд░рд╛ рддрд░реАрдХрд╛ рд╣реИ .set_downstream() рдореЗрдердб рд╕реЗ рдХрд┐рд╕реА рдЯрд╛рд╕реНрдХ рдХреЛ рджреВрд╕рд░реЗ рдХрд╛ рдбрд╛рдЙрдирд╕реНрдЯреНрд░реАрдо рд╕реЗрдЯ рдХрд░рдирд╛ред chain рдлрд╝рдВрдХреНрд╢рди рднреА рдХреНрд░рдорд┐рдХ рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рд╕реЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реИред рддреАрди рдЙрджрд╛рд╣рд░рдг:
# task_1, task_2, task_3 рдКрдкрд░ instantiate рдХрд┐рдП рдЧрдП рд╣реИрдВ
# рдмрд┐рдЯ-рд╢рд┐рдлреНрдЯ рдСрдкрд░реЗрдЯрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ
task_1 >> task_2 >> task_3
# .set_downstream() рдХрд╛ рдЙрдкрдпреЛрдЧ
task_1.set_downstream(task_2)
task_2.set_downstream(task_3)
# chain рдХрд╛ рдЙрдкрдпреЛрдЧ
chain(task_1, task_2, task_3)
рдФрд░ рдмрддрд╛рдЗрдП: рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рд╕реЗрдЯ рдХрд░рдирд╛ рдХрднреА рд╕рд░рд▓ рд╣реЛрддрд╛ рд╣реИ, рдХрднреА рдХрд╛рдлреА рдЬрдЯрд┐рд▓! рдХреНрд░рдорд┐рдХ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП, рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯрддрд╛ рд╣реЗрддреБ рдмрд┐рдЯ-рд╢рд┐рдлреНрдЯ рдСрдкрд░реЗрдЯрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдо рд╣реИред TaskFlow API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдЯрд╛рд╕реНрдХреНрд╕ рдХреЗ рдмреАрдЪ рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рд╕реЗрдЯ рдХрд░рдирд╛ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИред
рдпрджрд┐ рджреЛ рдЯрд╛рд╕реНрдХ рдирд┐рд░реНрднрд░ рд╣реИрдВ, рддреЛ рдКрдкрд░ рджрд┐рдП рддрд░реАрдХреЛрдВ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЛ рджреВрд╕рд░реЗ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЖрд░реНрдЧреНрдпреБрдореЗрдВрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░рдХреЗ рднреА рдпрд╣ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред Airflow рдХреА рдЯрд╛рд╕реНрдХ рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдкрд░ рдЕрд▓рдЧ рд▓реЗрдЦ рдореЗрдВ рдФрд░ рдЬрд╛рдиреЗрдВред
8. Task Groups рдХреНрдпрд╛ рд╣реИрдВ? рдЗрдиреНрд╣реЗрдВ DAGs рдХреЗ рднреАрддрд░ рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?
рдЙрддреНрддрд░: Task groups рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ DAG рдХреЗ рднреАрддрд░ рдЯрд╛рд╕реНрдХреНрд╕ рдХреЛ рд╕рдореВрд╣рд┐рдд рдХрд░ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд╕реЗ Airflow UI рдореЗрдВ рд╕рдорд╛рди рдЯрд╛рд╕реНрдХреНрд╕ рдХреЛ рдПрдХ рд╕рд╛рде рджрд░реНрд╢рд╛рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЯреАрдореЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдбреЗрдЯрд╛ рдХреЗ extract, transform, рдФрд░ load рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдПрдХ рд╣реА DAG рдореЗрдВ рд╕рдВрднрд╛рд▓рддреЗ рд╕рдордп task groups рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
Task groups рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдХреНрд╕рд░ рддрдм рднреА рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдХрдИ ML рдореЙрдбрд▓реЛрдВ рдХреЛ рдЯреНрд░реЗрди рдХрд░рдирд╛ рд╣реЛ рдпрд╛ рдПрдХ рд╣реА DAG рдореЗрдВ рдХрдИ (рдкрд░ рд╕рдорд╛рди) рд╕реНрд░реЛрдд рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рд╕реЗ рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рдирд╛ рд╣реЛред
Airflow рдореЗрдВ task groups рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░, рдкреНрд░рд╛рдкреНрдд рдЧреНрд░рд╛рдл рд╡реНрдпреВ рдХреБрдЫ рдРрд╕рд╛ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:

рдФрд░ рдмрддрд╛рдЗрдП: рдкрд╛рд░рдВрдкрд░рд┐рдХ Airflow рд╕рд┐рдВрдЯреИрдХреНрд╕ рдореЗрдВ, TaskGroup рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ task groups рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред Task groups рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдпрд╛ рдбрд╛рдпрдиреЗрдорд┐рдХ рд░реВрдк рд╕реЗ рдмрдирд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрдирдХреЗ IDs рдпреВрдирд┐рдХ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП (DAGs рдХреА рддрд░рд╣)ред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдПрдХ рд╣реА DAG рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ task groups рдореЗрдВ рд╕рдорд╛рди task_id рд╡рд╛рд▓реЗ рдЯрд╛рд╕реНрдХреНрд╕ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рддрдм рдЯрд╛рд╕реНрдХ рдХреЛ рдЙрд╕рдХреЗ task group ID рдФрд░ task ID рдХреЗ рд╕рдВрдпреЛрдЬрди рд╕реЗ рдпреВрдирд┐рдХ рдкрд╣рдЪрд╛рдирд╛ рдЬрд╛рдПрдЧрд╛ред TaskFlow API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, @task_group рдбреЗрдХреЛрд░реЗрдЯрд░ рд╕реЗ рднреА task group рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
9. рдЖрдк рдмрд┐рдирд╛ рдПрдХ рд╣реА рдХреЛрдб рдХреЛ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХрд┐рдП рдХрдИ DAGs рдХреЛ рдбрд╛рдпрдиреЗрдорд┐рдХ рд░реВрдк рд╕реЗ рдХреИрд╕реЗ рдЬреЗрдирд░реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдХрд┐рди рдмрд╛рддреЛрдВ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП?
рдЙрддреНрддрд░: рдбрд╛рдпрдиреЗрдорд┐рдХ рд░реВрдк рд╕реЗ DAGs рдЬреЗрдирд░реЗрдЯ рдХрд░рдирд╛ рдПрдХ рдЙрдкрдпреЛрдЧреА рддрдХрдиреАрдХ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдПрдХ рд╣реА тАЬрдХреЛрдб рдХреЗ рдЯреБрдХрдбрд╝реЗтАЭ рд╕реЗ рдХрдИ DAGs рдмрдирд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдХрдИ рд▓реЛрдХреЗрд╢рдиреЛрдВ рд╕реЗ рдбреЗрдЯрд╛ рдЦреАрдВрдЪрдирд╛ рдЗрд╕рдХрд╛ рдмрдврд╝рд┐рдпрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ рдПрдХ рд╣реА рд▓реЙрдЬрд┐рдХ рд╕реЗ рддреАрди рдПрдпрд░рдкреЛрд░реНрдЯреНрд╕ рд╕реЗ рдбреЗрдЯрд╛ рдХреЛ extract, transform рдФрд░ load рдХрд░рдирд╛ рд╣реИ, рддреЛ рдбрд╛рдпрдиреЗрдорд┐рдХ DAGs рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рддреЗ рд╣реИрдВред
рдЗрд╕реЗ рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рд╣реИ рдПрдХ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рд▓рд┐рд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ, рдЬрд┐рд╕ рдкрд░ рд▓реВрдк рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдПред рдлрд┐рд░ рд▓реВрдк рдХреЗ рднреАрддрд░ рдПрдХ DAG instantiate рдХрд┐рдпрд╛ рдЬрд╛рдПред рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рд╣рд░ DAG рдХрд╛ рдпреВрдирд┐рдХ DAG ID рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреЛрдб рдХреБрдЫ рдРрд╕рд╛ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:
airport_codes = ["atl", "lax", "jfk"]
for code in airport_codes:
with DAG(
dag_id=f"{code}_daily_etl"
start_date=datetime(2024, 1, 1, 9, 0),
schedule="@daily"
) as dag:
# Rest of the DAG definition
...
рдпрд╣ рдХреЛрдб рддреАрди DAGs рдмрдирд╛рдПрдЧрд╛, рдЬрд┐рдирдХреЗ DAG IDs рд╣реЛрдВрдЧреЗ atl_daily_etl, lax_daily_etl, рдФрд░ jfk_daily_etlред рдЖрдЧреЗ, рдЯрд╛рд╕реНрдХреНрд╕ рдХреЛ рдЙрд╕реА рдПрдпрд░рдкреЛрд░реНрдЯ рдХреЛрдб рд╕реЗ рдкреИрд░рд╛рдореАрдЯрд░рд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╣рд░ DAG рдЕрдкреЗрдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЪрд▓реЗред
рдФрд░ рдмрддрд╛рдЗрдП: рдбрд╛рдпрдиреЗрдорд┐рдХ DAG рдЬреЗрдирд░реЗрд╢рди рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЬ рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ рдЖрдо рддрдХрдиреАрдХ рд╣реИред рдЬрдм рдПрдХ рд╣реА DAG рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдордореИрдЯрд┐рдХ рд░реВрдк рд╕реЗ task groups рдмрдирд╛рдиреЗ рдФрд░ рдбрд╛рдпрдиреЗрдорд┐рдХ рд░реВрдк рд╕реЗ DAGs рдЬреЗрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмреАрдЪ рдирд┐рд░реНрдгрдп рд▓реЗрдВ, рддреЛ рдСрдкрд░реЗрд╢рдВрд╕ рдХреЗ рдмреАрдЪ рд░рд┐рд╢реНрддреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
рдКрдкрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдпрджрд┐ рдПрдХ рдПрдпрд░рдкреЛрд░реНрдЯ рдХрд┐рд╕реА exception рдХрд╛ рдХрд╛рд░рдг рдмрди рд░рд╣рд╛ рд╣реИ, рддреЛ task groups рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рдкреВрд░рд╛ DAG рдлреЗрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рд▓реЗрдХрд┐рди рдпрджрд┐ DAGs рдбрд╛рдпрдиреЗрдорд┐рдХ рд░реВрдк рд╕реЗ рдЬреЗрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рд╣реЛрдВ, рддреЛ рдпрд╣ рдПрдХрд▓ рдлреЗрд▓реНрдпреЛрд░ рджреВрд╕рд░реЗ рджреЛ DAGs рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
Python iterable рдкрд░ рд▓реВрдк рдЪрд▓рд╛рдирд╛ рдбрд╛рдпрдиреЗрдорд┐рдХ DAGs рдЬреЗрдирд░реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИтАФcreate_dag рдлрд╝рдВрдХреНрд╢рди рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛, variables/connections рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ DAGs рд╕реНрдкреЙрди рдХрд░рдирд╛, рдпрд╛ JSON рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдирд╛тАФрдпреЗ рд╕рднреА рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдХрд▓реНрдк рд╣реИрдВред gusty рдФрд░ dag-factory рдЬреИрд╕реЗ рдерд░реНрдб-рдкрд╛рд░реНрдЯреА рдЯреВрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди-рдЖрдзрд╛рд░рд┐рдд рдЕрдиреНрдп рдЕрдкреНрд░реЛрдЪ рднреА рджреЗрддреЗ рд╣реИрдВред
рдЙрдиреНрдирдд Airflow рдЗрдВрдЯрд░рд╡реНрдпреВ рдкреНрд░рд╢реНрди
Airflow рдФрд░ DAG рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдХреЗ рдмреЗрд╕рд┐рдХреНрд╕ рдХреЛ рд╕рдордЭрдирд╛ рдФрд░ рдмрддрд╛рдирд╛, рдЬреНрдпреВрдирд┐рдпрд░-рд▓реЗрд╡рд▓ рдХреА рднреВрдорд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рдЕрдХреНрд╕рд░ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди Airflow рдореЗрдВ рдорд╣рд╛рд░рдд рд╕рд┐рд░реНрдл DAGs рд▓рд┐рдЦрдиреЗ рдФрд░ рдЪрд▓рд╛рдиреЗ рд╕реЗ рдмрдврд╝рдХрд░ рд╣реИред
рдиреАрдЪреЗ рджрд┐рдП рдкреНрд░рд╢реНрди-рдЙрддреНрддрд░ рдЗрдВрдЯрд░рд╡реНрдпреВрдЕрд░ рдХреЛ Airflow рдХреА рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдХреНрд╖рдорддрд╛рдУрдВ рдХреА рдЧрд╣рд░реА рд╕рдордЭ рджрд┐рдЦрд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВрдЧреЗтАФрдЬреЛ рдЖрдорддреМрд░ рдкрд░ рд╕реАрдирд┐рдпрд░ рднреВрдорд┐рдХрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддреА рд╣реИред
10. data_interval_start рдФрд░ data_interval_end, рджрд┐рдП рд╣реЛрдиреЗ рдкрд░ DAG рдХрдм рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддрд╛ рд╣реИ?
рдЙрддреНрддрд░: рдирд╛рдо рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╣реИ, data_interval_start рдФрд░ data_interval_end DAG рд░рди рдХреЗ рд╕рдордп-рд╕реАрдорд╛ рдирд┐рд░реНрдзрд╛рд░рдХ рд╣реИрдВред рдпрджрд┐ DAG рдХреЛ рдмреИрдХрдлрд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдФрд░ DAG рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рд╕рдордп data_interval_end рд╕реЗ рдмрдбрд╝рд╛ рд╣реИ, рддреЛ DAG рддреБрд░рдВрдд рд░рди рдХреЗ рд▓рд┐рдП рдХреНрдпреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рд╣рд╛рд▓рд╛рдБрдХрд┐, тАЬрд╕рд╛рдорд╛рдиреНрдптАЭ рдирд┐рд╖реНрдкрд╛рджрди рдореЗрдВ, DAG рддрдм рддрдХ рдирд╣реАрдВ рдЪрд▓реЗрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рд╕рдордп **data_interval_end** рд╕реЗ рдмрдбрд╝рд╛ рди рд╣реЛред
рдФрд░ рдмрддрд╛рдЗрдП: рдпрд╣ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрдард┐рди рд╣реИ, рдЦрд╛рд╕рдХрд░ рдХреНрдпреЛрдВрдХрд┐ DAG рд░рди рдХреИрд╕реЗ рд▓реЗрдмрд▓ рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕реЗ рдРрд╕реЗ рд╕рдордЭреЗрдВ: рдЖрдк 17 рдорд╛рд░реНрдЪ, 2024 рдХреЗ рд╕рднреА рдбреЗрдЯрд╛ рдХрд┐рд╕реА API рд╕реЗ рдЦреАрдВрдЪрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдпрджрд┐ рд╢реЗрдбреНрдпреВрд▓ рдЗрдВрдЯрд░рд╡рд▓ рдбреЗрд▓реА рд╣реИ, рддреЛ рдЗрд╕ рд░рди рдХреЗ рд▓рд┐рдП data_interval_start 2024-03-17, 00:00:00 UTC рд╣реЛрдЧрд╛ рдФрд░ data_interval_end 2024-03-18, 00:00:00 UTCред 2024-03-17, 00:00:00 UTC рдкрд░ DAG рдЪрд▓рд╛рдирд╛ рд╕рдордЭрджрд╛рд░реА рдирд╣реАрдВ, рдХреНрдпреЛрдВрдХрд┐ 17 рдорд╛рд░реНрдЪ рдХрд╛ рдбреЗрдЯрд╛ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, DAG 2024-03-18, 00:00:00 UTC рдХреЗ data_interval_end рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдЧрд╛ред
11. catchup рдкреИрд░рд╛рдореАрдЯрд░ рдХреНрдпрд╛ рд╣реИ, рдФрд░ рдпрд╣ Airflow DAG рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдХреИрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ?
рдЙрддреНрддрд░: catchup рдкреИрд░рд╛рдореАрдЯрд░ DAG instantiate рдХрд░рддреЗ рд╕рдордп рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛрддрд╛ рд╣реИред catchup рдХрд╛ рдорд╛рди True рдпрд╛ False рд╣реЛ рд╕рдХрддрд╛ рд╣реИтАФрдбрд┐рдлрд╝реЙрд▓реНрдЯ True рд╣реИ рдпрджрд┐ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рди рджрд┐рдпрд╛ рдЬрд╛рдПред рдпрджрд┐ True, рддреЛ start date рдФрд░ рд╡рд╣ рд╕рдордп рдЬрдм DAG рдХрд╛ рд╕реНрдЯреЗрдЯрд╕ рдкрд╣рд▓реА рдмрд╛рд░ active рдХрд┐рдпрд╛ рдЧрдпрд╛тАФрдЙрдирдХреЗ рдмреАрдЪ рдХреЗ рд╕рднреА DAG runs рдЪрд▓реЗрдВрдЧреЗред
рдорд╛рди рд▓реАрдЬрд┐рдП DAG рдХрд╛ start date 1 рдЬрдирд╡рд░реА, 2024 рд╣реИ, рд╢реЗрдбреНрдпреВрд▓ рдбреЗрд▓реА рд╣реИ, рдФрд░ catchup=True рд╣реИред рдпрджрд┐ рдпрд╣ DAG рдкрд╣рд▓реА рдмрд╛рд░ 15 рдЕрдкреНрд░реИрд▓, 2024 рдХреЛ active рдХрд┐рдпрд╛ рдЧрдпрд╛, рддреЛ 1 рдЬрдирд╡рд░реА, 2024 рдХреЗ data_interval_start рд╡рд╛рд▓рд╛ рд░рди рдЪрд▓реЗрдЧрд╛, рдлрд┐рд░ 2 рдЬрдирд╡рд░реА, 2024 (рдФрд░ рдЖрдЧреЗ рдРрд╕реЗ рд╣реА)ред
рдпрд╣ рддрдм рддрдХ рдЬрд╛рд░реА рд░рд╣реЗрдЧрд╛ рдЬрдм рддрдХ DAG тАЬрдХреЕрдЪ рдЕрдктАЭ рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛тАФрдлрд┐рд░ рд╕рд╛рдорд╛рдиреНрдп рд╡реНрдпрд╡рд╣рд╛рд░ рдкрд░ рд▓реМрдЯреЗрдЧрд╛ред рдЗрд╕реЗ тАЬbackfillingтАЭ рдХрд╣рддреЗ рд╣реИрдВред рдмреИрдХрдлрд┐рд▓рд┐рдВрдЧ рдХрд╛рдлреА рддреЗрдЬрд╝ рд╣реЛ рд╕рдХрддреА рд╣реИтАФрдпрджрд┐ рдЖрдкрдХрд╛ DAG рд░рди рдХреБрдЫ рд╣реА рдорд┐рдирдЯ рд▓реЗрддрд╛ рд╣реИ, рддреЛ рдХреБрдЫ рдорд╣реАрдиреЛрдВ рдХреЗ рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рд░рди рдХреБрдЫ рдШрдВрдЯреЛрдВ рдореЗрдВ рдкреВрд░реЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рдпрджрд┐ False, рддреЛ рдХреЛрдИ рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рд░рди рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ, рдФрд░ рдкрд╣рд▓рд╛ рд░рди рдЙрд╕ рдЗрдВрдЯрд░рд╡рд▓ рдХреЗ рдЕрдВрдд рдореЗрдВ рд╢реБрд░реВ рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдХреЗ рджреМрд░рд╛рди DAG рд╕реНрдЯреЗрдЯрд╕ рд░рди рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдФрд░ рдмрддрд╛рдЗрдП: рдмрд┐рдирд╛ рдмрдбрд╝реЗ рдХреЛрдб рдмрджрд▓рд╛рд╡ рдпрд╛ рдореИрдиреБрдЕрд▓ рдкреНрд░рдпрд╛рд╕ рдХреЗ DAG runs рдХреЛ рдмреИрдХрдлрд┐рд▓ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ Airflow рдХреА рд╕рдмрд╕реЗ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЦреВрдмрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдк рдкрд┐рдЫрд▓реЗ рдПрдХ рд╡рд░реНрд╖ рдХреЗ рд╕рднреА рдЯреНрд░рд╛рдВрдЬрд╝реИрдХреНрд╢рдВрд╕ рдХрд┐рд╕реА API рд╕реЗ рдЦреАрдВрдЪрдиреЗ рдХрд╛ рдЗрдВрдЯреАрдЧреНрд░реЗрд╢рди рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВред
рдПрдХ рдмрд╛рд░ DAG рдмрди рдЬрд╛рдиреЗ рдкрд░, рдмрд╕ рдордирдЪрд╛рд╣рд╛ start date рд╕реЗрдЯ рдХрд░реЗрдВ рдФрд░ catchup=True рдХрд░ рджреЗрдВтАФрд╣рд┐рд╕реНрдЯреЛрд░рд┐рдХрд▓ рдбреЗрдЯрд╛ рдирд┐рдХрд╛рд▓рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдпрджрд┐ рдЖрдк рдкрд╣рд▓реА рдмрд╛рд░ active рдХрд░рддреЗ рд╕рдордп рдмреИрдХрдлрд┐рд▓ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ, рддреЛ рдЪрд┐рдВрддрд╛ рди рдХрд░реЗрдВ! рдмреИрдХрдлрд┐рд▓реНрд╕ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд░реВрдк рд╕реЗ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рдФрд░ рднреА рддрд░реАрдХреЗ рд╣реИрдВтАФAirflow API рдФрд░ Airflow (рдФрд░ Astro CLI) рд╕реЗ рдпрд╣ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
12. XComs рдХреНрдпрд╛ рд╣реИрдВ, рдФрд░ рдЖрдо рддреМрд░ рдкрд░ рдЗрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рд╣реЛрддрд╛ рд╣реИ?
рдЙрддреНрддрд░: XComs (cross-communications) Airflow рдХреА рдПрдХ рд╕реВрдХреНрд╖реНрдо рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдЬреЛ рдЯрд╛рд╕реНрдХреНрд╕ рдХреЗ рдмреАрдЪ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рд╕реНрдЯреЛрд░ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рджреЗрддреА рд╣реИред
XComs key-value рдкреЗрдпрд░реНрд╕ рдореЗрдВ рд╕реНрдЯреЛрд░ рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдХрдИ рддрд░реАрдХреЛрдВ рд╕реЗ рдкрдврд╝реЗ-рд▓рд┐рдЦреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред PythonOperator рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, callable рдХреЗ рднреАрддрд░ .xcom_push() рдФрд░ .xcom_pull() рдореЗрдердбреНрд╕ рд╕реЗ XComs рдореЗрдВ рдбреЗрдЯрд╛ тАЬpushтАЭ рдФрд░ тАЬpullтАЭ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред XComs рдореЗрдВ рдЫреЛрдЯреЗ рдбреЗрдЯрд╛тАФрдЬреИрд╕реЗ рдлрд╛рдЗрд▓ рдирд╛рдо рдпрд╛ рдПрдХ boolean рдлреНрд▓реИрдЧтАФрд╕реНрдЯреЛрд░ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рдФрд░ рдмрддрд╛рдЗрдП: .xcom_push() рдФрд░ .xcom_pull() рдХреЗ рдЕрд▓рд╛рд╡рд╛ рднреА XComs рдореЗрдВ рдбреЗрдЯрд╛ рд▓рд┐рдЦрдиреЗ-рдкрдврд╝рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВред PythonOperator рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддреЗ рд╕рдордп, do_xcom_push рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ True рджреЗрдиреЗ рдкрд░ callable рджреНрд╡рд╛рд░рд╛ рд░рд┐рдЯрд░реНрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдорд╛рди XComs рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣ рдХреЗрд╡рд▓ PythonOperator рддрдХ рд╕реАрдорд┐рдд рдирд╣реАрдВтАФрдХреЛрдИ рднреА рдСрдкрд░реЗрдЯрд░ рдЬреЛ рдХреЛрдИ рд╡реИрд▓реНрдпреВ рд░рд┐рдЯрд░реНрди рдХрд░рддрд╛ рд╣реИ, рдЙрд╕рдХреЗ рд░рд┐рдЯрд░реНрди рдорд╛рди рдХреЛ do_xcom_push рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗ XComs рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ, TaskFlow API рднреА рдЯрд╛рд╕реНрдХреНрд╕ рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП XComs рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ (рдЖрдЧреЗ рджреЗрдЦреЗрдВрдЧреЗ)ред
13. TaskFlow API рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдЗрдП, рдФрд░ рдпрд╣ рдкрд╛рд░рдВрдкрд░рд┐рдХ рдСрдкрд░реЗрдЯрд░реНрд╕ рд╕реЗ рдХреИрд╕реЗ рдЕрд▓рдЧ рд╣реИ?
рдЙрддреНрддрд░: TaskFlow API DAGs рд▓рд┐рдЦрдиреЗ рдХрд╛ рдПрдХ рдирдпрд╛, рдЕрдзрд┐рдХ рд╕рд╣рдЬ рдФрд░ тАЬPythonicтАЭ рддрд░реАрдХрд╛ рджреЗрддрд╛ рд╣реИред рдкрд╛рд░рдВрдкрд░рд┐рдХ рдСрдкрд░реЗрдЯрд░реНрд╕ рдХреЗ рдмрдЬрд╛рдп, Python рдлрд╝рдВрдХреНрд╢рдиреНрд╕ рдХреЛ @task рдбреЗрдХреЛрд░реЗрдЯрд░ рд╕реЗ рд╕рдЬрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдмрд┐рдирд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдП рдпрд╣ рдЯрд╛рд╕реНрдХ рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реАрдЬрд╝ рдХреЛ infer рдХрд░ рд╕рдХрддрд╛ рд╣реИред
TaskFlow API рдореЗрдВ рд▓рд┐рдЦрд╛ рдЯрд╛рд╕реНрдХ рдХреБрдЫ рдРрд╕рд╛ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:
import random
...
@task
def get_temperature():
# Pull a temperature, return the value
temperature = random.randint(0, 100)
return temperature
тАж
TaskFlow API рдХреЗ рд╕рд╛рде, рдЯрд╛рд╕реНрдХреНрд╕ рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рд╕реАрдзреЗ XComs рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдПрдХ рдЯрд╛рд╕реНрдХ (рдлрд╝рдВрдХреНрд╢рди) рдХрд╛ рд░рд┐рдЯрд░реНрди рдорд╛рди рджреВрд╕рд░реЗ рдЯрд╛рд╕реНрдХ рдореЗрдВ рдЖрд░реНрдЧреНрдпреБрдореЗрдВрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реАрдзреЗ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдкреВрд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдкрд░реНрджреЗ рдХреЗ рдкреАрдЫреЗ XComs рд╣реА рдЙрдкрдпреЛрдЧ рд╣реЛрддреЗ рд╣реИрдВтАФрдпрд╛рдиреА рдмрдбрд╝реЗ рдбреЗрдЯрд╛ рдХреЛ рдЯрд╛рд╕реНрдХреНрд╕ рдХреЗ рдмреАрдЪ рд╕рд╛рдЭрд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛, рднрд▓реЗ TaskFlow API рдЗрд╕реНрддреЗрдорд╛рд▓ рд╣реЛред
рдФрд░ рдмрддрд╛рдЗрдП: TaskFlow API Airflow рдХрд╛ DAG рд▓реЗрдЦрди рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рд╣реИ, рддрд╛рдХрд┐ рдпрд╣ рдбреЗрдЯрд╛ рд╡реИрдЬреНрдЮрд╛рдирд┐рдХреЛрдВ рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХреЛрдВ рдЬреИрд╕реЗ рд╡реНрдпрд╛рдкрдХ рджрд░реНрд╢рдХреЛрдВ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░реЗред рдЬрдмрдХрд┐ TaskFlow API рдХреНрд▓рд╛рдЙрдб рдбреЗрдЯрд╛ рдЗрдХреЛрд╕рд┐рд╕реНрдЯрдо рдЗрдВрдЯреАрдЧреНрд░реЗрд╢рди рдЪрд╛рд╣рдиреЗ рд╡рд╛рд▓реА рдбреЗрдЯрд╛ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рдЯреАрдореЛрдВ рдХреА рд╣рд░ рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рдкреВрд░реА рдХрд░рддрд╛, рдпрд╣ рдмреЗрд╕рд┐рдХ ETL рдЯрд╛рд╕реНрдХреНрд╕ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА (рдФрд░ рд╕рд╣рдЬ) рд╣реИред
TaskFlow API рдФрд░ рдкрд╛рд░рдВрдкрд░рд┐рдХ рдСрдкрд░реЗрдЯрд░реНрд╕ рдПрдХ рд╣реА DAG рдореЗрдВ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВтАФрдкрд╛рд░рдВрдкрд░рд┐рдХ рдСрдкрд░реЗрдЯрд░реНрд╕ рдХреА рдЗрдВрдЯреАрдЧреНрд░реЗрдмрд┐рд▓рд┐рдЯреА рдФрд░ TaskFlow API рдХреА рд╕рд░рд▓рддрд╛, рджреЛрдиреЛрдВ рдХрд╛ рд▓рд╛рдн рдорд┐рд▓рддрд╛ рд╣реИред TaskFlow API рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдбреЙрдХреНрдпреВрдореЗрдВрдЯреЗрд╢рди рджреЗрдЦреЗрдВред
14. Idempotency рдХреНрдпрд╛ рд╣реИ? Airflow DAGs рдмрдирд╛рддреЗ рд╕рдордп рдЗрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рдХреНрдпреЛрдВ рдЬрд╝рд░реВрд░реА рд╣реИ?
рдЙрддреНрддрд░: Idempotency рдХрд┐рд╕реА рдкреНрд░рдХреНрд░рд┐рдпрд╛/рдСрдкрд░реЗрд╢рди рдХрд╛ рдЧреБрдг рд╣реИ рдЬреЛ рдЙрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХрдИ рдмрд╛рд░ рдХрд░рдиреЗ рдкрд░ рднреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдирд╣реАрдВ рдмрджрд▓рддрд╛ред рд╕рд░рд▓ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдпрджрд┐ рдЖрдк DAG рдПрдХ рдмрд╛рд░ рдЪрд▓рд╛рдПрдБ рдпрд╛ рджрд╕ рдмрд╛рд░тАФрдкрд░рд┐рдгрд╛рдо рд╕рдорд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдПрдХ рдЖрдо рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдЬрд╣рд╛рдБ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛тАФрд╕реНрдЯреНрд░рдХреНрдЪрд░реНрдб (SQL) рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдбреЗрдЯрд╛ insert рдХрд░рдирд╛ред рдпрджрд┐ primary key рд▓рд╛рдЧреВ рдХрд┐рдП рдмрд┐рдирд╛ рдбреЗрдЯрд╛ insert рдХрд┐рдпрд╛ рдЧрдпрд╛ рдФрд░ DAG рдХрдИ рдмрд╛рд░ рдЪрд▓рд╛, рддреЛ рдЯреЗрдмрд▓ рдореЗрдВ рдбреБрдкреНрд▓рд┐рдХреЗрдЯреНрд╕ рдЖ рдЬрд╛рдПрдБрдЧреЗред delete-insert рдпрд╛ тАЬupsertтАЭ рдЬреИрд╕реЗ рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдбреЗрдЯрд╛ рдкрд╛рдЗрдкрд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ idempotence рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред
рдФрд░ рдмрддрд╛рдЗрдП: рдпрд╣ рдкреВрд░реА рддрд░рд╣ Airflow-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд╣реАрдВ, рдкрд░ рдбреЗрдЯрд╛ рдкрд╛рдЗрдкрд▓рд╛рдЗрдиреНрд╕ рдбрд┐рдЬрд╛рдЗрди рд╡ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╕рдордп рдЕрдирд┐рд╡рд╛рд░реНрдп рд╣реИред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, Airflow рдХрдИ рдЯреВрд▓ рджреЗрддрд╛ рд╣реИ рдЬреЛ idempotency рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддреЗ рд╣реИрдВред рдлрд┐рд░ рднреА, рдЗрд╕рдХрд╛ рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЙрдЬрд┐рдХ рдкреНрд░реИрдХреНрдЯрд┐рд╢рдирд░ рдХреЛ рд╣реА рдбрд┐рдЬрд╛рдЗрди, рд╡рд┐рдХрд╕рд┐рдд рдФрд░ рдЯреЗрд╕реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдкреНрд░реЛрдбрдХреНрд╢рди Airflow рд╡рд░реНрдХрдлрд╝реНрд▓реЛрдЬрд╝ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдФрд░ рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ: рдЗрдВрдЯрд░рд╡реНрдпреВ рдкреНрд░рд╢реНрди
рдЬрд╝реНрдпрд╛рджрд╛ рддрдХрдиреАрдХреА рднреВрдорд┐рдХрд╛рдУрдВ рдореЗрдВ, рдЗрдВрдЯрд░рд╡реНрдпреВрдЕрд░ рдкреНрд░реЛрдбрдХреНрд╢рди-рдЧреНрд░реЗрдб Airflow рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯ рдХреЗ рдкреНрд░рдмрдВрдзрди рдФрд░ рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рд╕реЗ рдЬреБрдбрд╝реЗ рдкреНрд░рд╢реНрди рдкреВрдЫ рд╕рдХрддреЗ рд╣реИрдВтАФрдЬреИрд╕рд╛ рд╡реЗ рдЕрдкрдиреА рдЯреАрдо рдореЗрдВ рдЪрд▓рд╛рддреЗ рд╣реЛрдВред рдпреЗ рдкреНрд░рд╢реНрди рдереЛрдбрд╝реЗ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдЗрдВрдЯрд░рд╡реНрдпреВ рд╕реЗ рдкрд╣рд▓реЗ рдЕрдзрд┐рдХ рддреИрдпрд╛рд░реА рдорд╛рдБрдЧрддреЗ рд╣реИрдВред
15. рдПрдХ DAG рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдЙрд╕реЗ рдХреИрд╕реЗ рдЯреЗрд╕реНрдЯ рдХрд░реЗрдВрдЧреЗ? рд╢реБрд░реБрдЖрдд рд╕реЗ рдЕрдВрдд рддрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрддрд╛рдЗрдПред
рдЙрддреНрддрд░: DAG рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд╛рдж рдЙрд╕реЗ рдЯреЗрд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рдХреБрдЫ рддрд░реАрдХреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдЖрдо рд╣реИ DAG рдХреЛ рдПрдХреНрдЬреАрдХреНрдпреВрдЯ рдХрд░рдХреЗ рджреЗрдЦрдирд╛ рдХрд┐ рд╡рд╣ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЪрд▓рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдпрд╣ рд▓реЛрдХрд▓ Airflow рд╡рд╛рддрд╛рд╡рд░рдг рд╕реНрдкрд┐рди-рдЕрдк рдХрд░рдХреЗ рдФрд░ Airflow UI рд╕реЗ DAG рдЯреНрд░рд┐рдЧрд░ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
DAG рдЯреНрд░рд┐рдЧрд░ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдЙрд╕рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдореЙрдирд┐рдЯрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИтАФрдпрд╛рдиреА DAG рдФрд░ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЯрд╛рд╕реНрдХреНрд╕ рдХреА рд╕рдлрд▓рддрд╛/рдЕрд╕рдлрд▓рддрд╛, рдФрд░ рд░рди рдореЗрдВ рд▓рдЧрд╛ рд╕рдордп рд╡ рд╕рдВрд╕рд╛рдзрдиред
рдореИрдиреНрдпреБрдЕрд▓ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдЕрд▓рд╛рд╡рд╛, DAGs рдХреЗ рдпреВрдирд┐рдЯ рдЯреЗрд╕реНрдЯ рднреА рд▓рд┐рдЦреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред Airflow CLI рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЯреЗрд╕реНрдЯ рдПрдХреНрдЬреАрдХреНрдпреВрдЯ рдХрд░рдиреЗ рдХреЗ рдЯреВрд▓ рджреЗрддрд╛ рд╣реИ, рдпрд╛ рдХреЛрдИ рд╕реНрдЯреИрдВрдбрд░реНрдб рдЯреЗрд╕реНрдЯ рд░рдирд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпреЗ рдпреВрдирд┐рдЯ рдЯреЗрд╕реНрдЯ DAG рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдФрд░ рдирд┐рд╖реНрдкрд╛рджрдитАФрджреЛрдиреЛрдВ рдкрд░, рдФрд░ Airflow рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдЕрдиреНрдп рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕ (рдЬреИрд╕реЗ callables рдФрд░ plugins) рдкрд░ рднреА рд▓рд┐рдЦреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдФрд░ рдмрддрд╛рдЗрдП: Airflow DAGs рдХреА рдЯреЗрд╕реНрдЯрд┐рдВрдЧ рдбреЗрдЯрд╛ рдЗрдВрдЬреАрдирд┐рдпрд░ рдХрд╛ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдпрджрд┐ DAG рдЯреЗрд╕реНрдЯ рдирд╣реАрдВ рд╣реБрдЖ, рддреЛ рд╡рд╣ рдкреНрд░реЛрдбрдХреНрд╢рди рд╡рд░реНрдХрдлрд╝реНрд▓реЛрдЬрд╝ рд╕рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реИред
рдбреЗрдЯрд╛ рдкрд╛рдЗрдкрд▓рд╛рдЗрдиреЛрдВ рдХреА рдЯреЗрд╕реНрдЯрд┐рдВрдЧ рдЦрд╛рд╕ рддреМрд░ рд╕реЗ рдХрдард┐рди рд╣реИ; рдРрд╕реЗ edge рдФрд░ corner cases рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдЕрдиреНрдп рд╡рд┐рдХрд╛рд╕ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рдЖрдо рдирд╣реАрдВред рдЕрдзрд┐рдХ рддрдХрдиреАрдХреА рдЗрдВрдЯрд░рд╡реНрдпреВ (рдЦрд╛рд╕рдХрд░ рд▓реАрдб/рд╕реАрдирд┐рдпрд░ рдЗрдВрдЬреАрдирд┐рдпрд░) рдореЗрдВ, рдПрдВрдб-рдЯреВ-рдПрдВрдб DAG рдЯреЗрд╕реНрдЯрд┐рдВрдЧ рдХреЗ рдорд╣рддреНрд╡ рдкрд░ рдЬрд╝реЛрд░ рджреЗрдВтАФрд╕рд╛рде рд╣реА рдпреВрдирд┐рдЯ рдЯреЗрд╕реНрдЯ рд▓рд┐рдЦрдиреЗ рдФрд░ рдЙрдирдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХрд░рдиреЗ рдкрд░ рднреАред
16. рдЖрдк DAG рдлреЗрд▓реНрдпреЛрд░ рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВ? рддреНрд░рд┐рдПрдЬ рдФрд░ рдлрд┐рдХреНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХрд░рддреЗ рд╣реИрдВ?
рдЙрддреНрддрд░: DAG рдлреЗрд▓реНрдпреЛрд░ рдХрд┐рд╕реА рдХреЛ рдкрд╕рдВрдж рдирд╣реАрдВ, рдкрд░ рдЙрдиреНрд╣реЗрдВ рд╢рд╛рд▓реАрдирддрд╛ рд╕реЗ рд╕рдВрднрд╛рд▓рдирд╛ рдЖрдкрдХреЛ рдПрдХ рдбреЗрдЯрд╛ рдЗрдВрдЬреАрдирд┐рдпрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрд▓рдЧ рдЦрдбрд╝рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, Airflow рдХреЗ рдкрд╛рд╕ рдлреЗрд▓реНрдпреЛрд░ рдХреЛ рдХреИрдкреНрдЪрд░, рдЕрд▓рд░реНрдЯ рдФрд░ рд╕реБрдзрд╛рд░рдиреЗ рдХреЗ рд▓рд┐рдП рдвреЗрд░реЛрдВ рдЯреВрд▓ рд╣реИрдВред рдкрд╣рд▓реЗ, DAG рдХрд╛ рдлреЗрд▓реНрдпреЛрд░ Airflow UI рдореЗрдВ рдХреИрдкреНрдЪрд░ рд╣реЛрддрд╛ рд╣реИред DAG рдХреА рд╕реНрдЯреЗрдЯ тАЬfailedтАЭ рдореЗрдВ рдмрджрд▓ рдЬрд╛рдПрдЧреА, рдФрд░ рдЧреНрд░рд┐рдб рд╡реНрдпреВ рдореЗрдВ рдЗрд╕ рд░рди рдХреЗ рд▓рд┐рдП рд▓рд╛рд▓ рдЪреМрдХреЛрд░/рдЖрдпрдд рджрд┐рдЦреЗрдЧрд╛ред рдлрд┐рд░, UI рдореЗрдВ рд╣реА рдЗрд╕ рдЯрд╛рд╕реНрдХ рдХреЗ рд▓реЙрдЧреНрд╕ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓реА рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЖрдо рддреМрд░ рдкрд░ рдпреЗ рд▓реЙрдЧреНрд╕ рд╡рд╣ exception рджреЗрдВрдЧреЗ рдЬрд┐рд╕рдиреЗ рдлреЗрд▓реНрдпреЛрд░ рдХрд░рд╛рдпрд╛ рдФрд░ рдЖрдЧреЗ рддреНрд░рд┐рдПрдЬ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирдХрд╛рд░реА рджреЗрдВрдЧреЗред
рдореБрджреНрджрд╛ рдкрд╣рдЪрд╛рдирдиреЗ рдХреЗ рдмрд╛рдж, DAG рдХреЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХреЛрдб/рдХреЙрдирдлрд┐рдЧ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ DAG рдХреЛ рдлрд┐рд░ рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИтАФDAG рдХреА рд╕реНрдЯреЗрдЯ рдХреНрд▓рд┐рдпрд░ рдХрд░ рдЙрд╕реЗ тАЬactiveтАЭ рд╕реЗрдЯ рдХрд░рдХреЗред
рдпрджрд┐ рдХреЛрдИ DAG рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдлреЗрд▓ рд╣реЛрддрд╛ рд╣реИ рдкрд░ retry рдкрд░ рдЪрд▓ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ Airflow рдХреЗ retries рдФрд░ retry_delay рдХрд╛ рдЙрдкрдпреЛрдЧ рдорджрджрдЧрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпреЗ рджреЛ рдкреИрд░рд╛рдореАрдЯрд░реНрд╕ рдлреЗрд▓реНрдпреЛрд░ рдкрд░ рдХрд┐рд╕реА рдЯрд╛рд╕реНрдХ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдмрд╛рд░ retry рдХрд░рд╡рд╛рддреЗ рд╣реИрдВтАФрдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╡рд┐рд▓рдВрдм рдХреЗ рдмрд╛рджред рдпрд╣ SFTP рд╕рд╛рдЗрдЯ рд╕реЗ рдлрд╛рдЗрд▓ рдЦреАрдВрдЪрдиреЗ рдЬреИрд╕реЗ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реИ, рдЬрд╣рд╛рдБ рдлрд╛рдЗрд▓ рджреЗрд░ рд╕реЗ рдЖ рд╕рдХрддреА рд╣реИред
рдФрд░ рдмрддрд╛рдЗрдП: DAG рдХреЗ рдлреЗрд▓ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рдЯрд╛рд╕реНрдХ рдлреЗрд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдкреВрд░реЗ DAG рдХреЗ рдмрдЬрд╛рдп рдЙрд╕реА рдЯрд╛рд╕реНрдХ рдХрд╛ рддреНрд░рд┐рдПрдЬ рдХрд░рдирд╛ рдЬрд╝рд░реВрд░реА рд╣реИред UI рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, DAG рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдореЙрдирд┐рдЯрд░ рдФрд░ рдореИрдиреЗрдЬ рдХрд░рдиреЗ рдХреЗ рдФрд░ рднреА рдмрд╣реБрдд рд╕реЗ рдЯреВрд▓реНрд╕ рд╣реИрдВред
Callbacks рдбреЗрдЯрд╛ рдЗрдВрдЬреАрдирд┐рдпрд░реНрд╕ рдХреЛ DAG рд╕рдлрд▓рддрд╛ рдФрд░ рд╡рд┐рдлрд▓рддрд╛ рд╕рдВрднрд╛рд▓рдиреЗ рдореЗрдВ рд▓рдЧрднрдЧ рдЕрд╕реАрдо рдХрд╕реНрдЯрдорд╛рдЗрдЬрд╝реЗрд╢рди рджреЗрддреЗ рд╣реИрдВред on_success_callback рдФрд░ on_failure_callback рдкреИрд░рд╛рдореАрдЯрд░реНрд╕ рд╕реЗ, рдСрдкрд░реЗрдЯрд░ рдХрд┐рд╕реА рдЪреБрдиреА рд╣реБрдИ рдлрд╝рдВрдХреНрд╢рди рдХреЛ DAG рдХреА рд╕рдлрд▓рддрд╛ рдпрд╛ рд╡рд┐рдлрд▓рддрд╛ рдкрд░ рдЪрд▓рд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдлрд╝рдВрдХреНрд╢рди PagerDuty рдЬреИрд╕реЗ рдЯреВрд▓ рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдкрд░рд┐рдгрд╛рдо рдХрд┐рд╕реА рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдмрд╛рдж рдореЗрдВ рдЕрд▓рд░реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗтАФрджреГрд╢реНрдпрддрд╛ рдмрдврд╝рддреА рд╣реИ рдФрд░ рдлреЗрд▓реНрдпреЛрд░ рд╣реЛрдиреЗ рдкрд░ рддреНрд░рд┐рдПрдЬ рдЬрд▓реНрджреА рд╢реБрд░реВ рд╣реЛ рдЬрд╛рддреА рд╣реИред
17. рдбреЗрдЯрд╛рдмреЗрд╕, APIs, рдФрд░ SFTP рд╕рд╛рдЗрдЯреНрд╕ рдЬреИрд╕реЗ рдЯреВрд▓реНрд╕ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рд╣реЗрддреБ Airflow рдХреНрдпрд╛ рд╕реБрд╡рд┐рдзрд╛ рджреЗрддрд╛ рд╣реИ?
рдЙрддреНрддрд░: Airflow рдХрд╛ рдПрдХ рдмреЗрд╣рдж рдЙрдкрдпреЛрдЧреА рдЯреВрд▓ рд╣реИ тАЬconnectionsредтАЭ рдХрдиреЗрдХреНрд╢рдВрд╕ рд╕реЗ DAG рдСрдерд░ рд╣реЛрд╕реНрдЯ, рдпреВрдЬрд╝рд░рдиреЗрдо, рдкрд╛рд╕рд╡рд░реНрдб рдЖрджрд┐ рдЬреИрд╕реА рдХрдиреЗрдХреНрд╢рди рдЬрд╛рдирдХрд╛рд░реА рдХреЛрдб рдореЗрдВ рд╣рд╛рд░реНрдбрдХреЛрдб рдХрд┐рдП рдмрд┐рдирд╛ рд╕реНрдЯреЛрд░ рдФрд░ рдПрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдХрдиреЗрдХреНрд╢рдВрд╕ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рдХреБрдЫ рддрд░реАрдХреЗ рд╣реИрдВ; рд╕рдмрд╕реЗ рдЖрдо Airflow UI рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реИред рдХрдиреЗрдХреНрд╢рди рдмрдирдиреЗ рдХреЗ рдмрд╛рдж, рдЗрд╕реЗ рдХреЛрдб рдореЗрдВ рд╕реАрдзреЗ тАЬhookтАЭ рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЕрдзрд┐рдХрд╛рдВрд╢ рдкрд╛рд░рдВрдкрд░рд┐рдХ рдСрдкрд░реЗрдЯрд░реНрд╕ рдЬреЛ рдХрд┐рд╕реА рд╕реНрд░реЛрдд рдкреНрд░рдгрд╛рд▓реА рд╕реЗ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдорд╛рдБрдЧрддреЗ рд╣реИрдВ, рдЙрдирдХреЗ рдкрд╛рд╕ conn_id (рдпрд╛ рдорд┐рд▓рддрд╛-рдЬреБрд▓рддрд╛) рдлрд╝реАрд▓реНрдб рд╣реЛрддрд╛ рд╣реИтАФрдЬреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдордирдЪрд╛рд╣реЗ рд╕реНрд░реЛрдд рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдмрдирд╛рддрд╛ рд╣реИред
Airflow рдХрдиреЗрдХреНрд╢рдВрд╕ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░рдЦрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рднрдВрдбрд╛рд░рдг рд╡ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ рдмреЗрд╣рдж рдЖрд╕рд╛рди рдмрдирд╛рддреЗ рд╣реИрдВред
рдФрд░ рдмрддрд╛рдЗрдП: Airflow UI рдХреЗ рдЕрд▓рд╛рд╡рд╛, CLI рд╕реЗ рднреА рдХрдиреЗрдХреНрд╢рдВрд╕ рд╕реНрдЯреЛрд░ рдФрд░ рд░рд┐рдЯреНрд░реАрд╡ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЬ рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ рдЕрдХреНрд╕рд░ рдХрд╕реНрдЯрдо тАЬsecrets backendтАЭ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рдмрдВрдзрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИред Airflow рдХрдиреЗрдХреНрд╢рдВрд╕ рдкреНрд░рдмрдВрдзрди рд╣реЗрддреБ рдХрдИ рд╕рдкреЛрд░реНрдЯреЗрдб secrets backends рджреЗрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, AWS рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдХрдВрдкрдиреА рдЖрд╕рд╛рдиреА рд╕реЗ Secrets Manager рдХреЛ Airflow рд╕реЗ рдЗрдВрдЯреАрдЧреНрд░реЗрдЯ рдХрд░ рд╕рдХрддреА рд╣реИред рдЖрд╡рд╢реНрдпрдХрддрд╛ рдкрдбрд╝рдиреЗ рдкрд░, рдХрдиреЗрдХреНрд╢рдВрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ environment variables рдореЗрдВ рднреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред
18. рдЖрдк рдХрд┐рд╕реА Airflow рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдкреНрд░реЛрдбрдХреНрд╢рди-рдЧреНрд░реЗрдб рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЪрд▓рд╛рдиреЗ рд╣реЗрддреБ рдХреИрд╕реЗ рдбрд┐рдкреНрд▓реЙрдп рдХрд░реЗрдВрдЧреЗ?
рдЙрддреНрддрд░: рдкреНрд░реЛрдбрдХреНрд╢рди-рдЧреНрд░реЗрдб рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рд▓рд┐рдП Airflow рдбрд┐рдкреНрд▓реЙрдп рдХрд░рдирд╛ рдХрдард┐рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред Azure рдФрд░ AWS рдЬреИрд╕реЗ рдХреНрд▓рд╛рдЙрдб рдЯреВрд▓реНрд╕ Airflow рдбрд┐рдкреНрд▓реЙрдп рдФрд░ рдореИрдиреЗрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП managed services рджреЗрддреЗ рд╣реИрдВтАФрдкрд░ рдЗрдирдХреЗ рд▓рд┐рдП рдХреНрд▓рд╛рдЙрдб рдЕрдХрд╛рдЙрдВрдЯ рдЪрд╛рд╣рд┐рдП рдФрд░ рдпреЗ рдорд╣рдВрдЧреЗ рднреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдХрд▓реНрдк Kubernetes рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдкреНрд░реЛрдбрдХреНрд╢рди Airflow рд╡рд╛рддрд╛рд╡рд░рдг рдбрд┐рдкреНрд▓реЙрдп рдФрд░ рд░рди рдХрд░рдирд╛ рд╣реИред рдЗрд╕рд╕реЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдкрд░ рдкреВрд░рд╛ рдирд┐рдпрдВрддреНрд░рдг рдорд┐рд▓рддрд╛ рд╣реИтАФрдкрд░ рдЙрд╕ рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХреЛ рдореИрдиреЗрдЬ рдХрд░рдиреЗ рдХреА рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░реА рднреА рдЖрддреА рд╣реИред
рдХреНрд▓рд╛рдЙрдб-рдиреЗрдЯрд┐рд╡ рдФрд░ рд╣реЛрдордЧреНрд░реЛрди Kubernetes рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯреНрд╕ рд╕реЗ рдкрд░реЗ, Astronomer рдЗрд╕ рд╕реНрдкреЗрд╕ рдореЗрдВ Airflow рдХрд╛ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп managed service рдкреНрд░рджрд╛рддрд╛ рд╣реИред
рд╡реЗ рдЕрдкрдиреЗ тАЬAstroтАЭ PaaS рдСрдлрд╝рд░рд┐рдВрдЧ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрдИ рдУрдкрди-рд╕реЛрд░реНрд╕ рдЯреВрд▓рд┐рдВрдЧ (CLI, SDK, рдвреЗрд░ рд╕рд╛рд░рд╛ рдбреЙрдХреНрдпреВрдореЗрдВрдЯреЗрд╢рди) рджреЗрддреЗ рд╣реИрдВтАФрдЬрд┐рд╕рд╕реЗ Airflow рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдФрд░ рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯ рдпрдерд╛рд╕рдВрднрд╡ рд╕реНрдореВрдж рд╣реЛред Astro рдХреЗ рд╕рд╛рде, рд╕рдВрд╕рд╛рдзрди рдЖрд╡рдВрдЯрди, рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдПрдХреНрд╕реЗрд╕ рдХрдВрдЯреНрд░реЛрд▓ рдФрд░ рдЗрди-рдкреНрд▓реЗрд╕ Airflow рдЕрдкрдЧреНрд░реЗрдбреНрд╕ рдиреИрдЯрд┐рд╡рд▓реА рд╕рдкреЛрд░реНрдЯреЗрдб рд╣реИрдВтАФрдЬрд┐рд╕рд╕реЗ рдлреЛрдХрд╕ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдкрд░ рд▓реМрдЯ рдЖрддрд╛ рд╣реИред
рдкрд░рд┐рджреГрд╢реНрдп-рдЖрдзрд╛рд░рд┐рдд Airflow рдЗрдВрдЯрд░рд╡реНрдпреВ рдкреНрд░рд╢реНрди
рдпрджреНрдпрдкрд┐ рдкрд░рд┐рджреГрд╢реНрдп-рдЖрдзрд╛рд░рд┐рдд рдкреНрд░рд╢реНрди рдЕрддреНрдпрдзрд┐рдХ рддрдХрдиреАрдХреА рдирд╣реАрдВ рд╣реЛрддреЗ, рд╡реЗ Airflow рдЗрдВрдЯрд░рд╡реНрдпреВ рдХреЗ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рд╢реНрдиреЛрдВ рдореЗрдВ рд╕реЗ рд╣реИрдВред рд╡рд┐рд╕реНрддреГрдд рдФрд░ рд╕реЛрдЪ-рд╕рдордЭрдХрд░ рджрд┐рдП рдЙрддреНрддрд░ рди рдХреЗрд╡рд▓ Airflow, рдмрд▓реНрдХрд┐ рдбреЗрдЯрд╛ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдФрд░ рдбрд┐рдЬрд╛рдЗрди рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреА рдЧрд╣рд░реА рджрдХреНрд╖рддрд╛ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВред
19. рдЖрдкрдХреА рдЯреАрдо рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдПрдХ рд▓реЗрдЧреЗрд╕реА рдбреЗрдЯрд╛ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд╕рдкреЛрд░реНрдЯ рдХрд░ рд░рд╣реА рд╣реИ рдЬреЛ рд╣реЛрдордЧреНрд░реЛрди рдЯреВрд▓рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИред рдЖрдкрдХреЛ рдЗрд╕ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЛ Airflow рдореЗрдВ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рдо рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИред рдЖрдк рдЗрд╕реЗ рдХреИрд╕реЗ рдПрдкреНрд░реЛрдЪ рдХрд░реЗрдВрдЧреЗ?
рдЙрддреНрддрд░: рдпрд╣ рдордЬрд╝реЗрджрд╛рд░ рд╣реИ! рдРрд╕реЗ рдкреНрд░рд╢реНрди рдореЗрдВ рд╕рдВрднрд╛рд╡рдирд╛рдПрдБ рдЕрдирдВрдд рд╣реИрдВред рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рддтАФрдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрддрд╛рддреЗ рд╕рдордп, рд▓реЗрдЧреЗрд╕реА рдбреЗрдЯрд╛ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЗ рдЙрди рдЯреВрд▓реНрд╕ рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдЪреБрдиреЗрдВ рдЬрд┐рдирд╕реЗ рдЖрдк рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВред рдЗрд╕рд╕реЗ рдЖрдкрдХреА рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рджрд┐рдЦреЗрдЧреА рдФрд░ рдЙрддреНрддрд░ рдЕрдзрд┐рдХ рд╕реВрдЪрд┐рдд рд╣реЛрдЧрд╛ред
рдпрд╣ рдЖрдкрдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореИрдиреЗрдЬрдореЗрдВрдЯ рдФрд░ рд▓реАрдбрд░рд╢рд┐рдк рд╕реНрдХрд┐рд▓реНрд╕ рджрд┐рдЦрд╛рдиреЗ рдХрд╛ рднреА рдЙрддреНрддрдо рдЕрд╡рд╕рд░ рд╣реИред рдмрддрд╛рдПрдВ рдХрд┐ рдЖрдк рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреИрд╕реЗ рд╕рдВрд░рдЪрд┐рдд рдХрд░реЗрдВрдЧреЗ, рд╕реНрдЯреЗрдХрд╣реЛрд▓реНрдбрд░реНрд╕ рдФрд░ рдЕрдиреНрдп рдЗрдВрдЬреАрдирд┐рдпрд░реНрд╕ рд╕реЗ рдХреИрд╕реЗ рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдХреИрд╕реЗ рдбреЙрдХреНрдпреВрдореЗрдВрдЯ/рдХрдореНрдпреВрдирд┐рдХреЗрдЯ рдХрд░реЗрдВрдЧреЗред рдЗрд╕рд╕реЗ рдореВрд▓реНрдп рджреЗрдиреЗ рдФрд░ рдЯреАрдо рдХрд╛ рдХрд╛рдо рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдкрд░ рдЖрдкрдХрд╛ рдлреЛрдХрд╕ рдЭрд▓рдХреЗрдЧрд╛ред
рдпрджрд┐ рдХрд┐рд╕реА рдХрдВрдкрдиреА рдХреЗ рд╕реНрдЯреИрдХ рдореЗрдВ рдХреЛрдИ рдЦрд╛рд╕ рдЯреВрд▓ рд╣реИ (рдорд╛рди рд▓реЗрдВ Google BigQuery), рддреЛ рдпрд╣ рдмрддрд╛рдирд╛ рддрд╛рд░реНрдХрд┐рдХ рд╣реИ рдХрд┐ рдЖрдк рдХреИрд╕реЗ рдХрд┐рд╕реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ Postgres рд╕реЗ рд╣рдЯрд╛рдХрд░ BigQuery рдкрд░ рд▓реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд╕реЗ рдХреЗрд╡рд▓ Airflow рд╣реА рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдХрдВрдкрдиреА рдХреЗ рдЕрдиреНрдп рдЗрдВрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕ рдХреА рдЖрдкрдХреА рдЬрд╛рдирдХрд╛рд░реА рднреА рдЭрд▓рдХрддреА рд╣реИред
20. рдПрдХ рдРрд╕рд╛ DAG рдбрд┐рдЬрд╝рд╛рдЗрди рдХреАрдЬрд┐рдП рдЬреЛ рдХрд┐рд╕реА API рд╕реЗ рдбреЗрдЯрд╛ рдЦреАрдВрдЪреЗ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рдлреНрд▓реИрдЯ-рдлрд╛рдЗрд▓ рдореЗрдВ рд╕реБрд░рдХреНрд╖рд┐рдд рдХрд░реЗ, рдлрд┐рд░ рдбреЗрдЯрд╛ рдХреЛ рдХреНрд▓рд╛рдЙрдб рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдореЗрдВ рд▓реЛрдб рдХрд░реЗ рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо рдХрд░реЗред рдХрд┐рди рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рддреЛрдВ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП?
рдЙрддреНрддрд░: рдЗрд╕ DAG рдХреЛ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ API рдХреЛ рд╣рд┐рдЯ рдХрд░ рдбреЗрдЯрд╛ рдирд┐рдХрд╛рд▓рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ PythonOperator рдФрд░ рдХрд╕реНрдЯрдо-рдмрд┐рд▓реНрдЯ callable рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрд╕реА callable рдореЗрдВ, рдбреЗрдЯрд╛ рдХреЛ рдХрд┐рд╕реА рдХреНрд▓рд╛рдЙрдб рд╕реНрдЯреЛрд░реЗрдЬ рд▓реЛрдХреЗрд╢рдитАФрдЬреИрд╕реЗ AWS S3тАФрдореЗрдВ рд╕реБрд░рдХреНрд╖рд┐рдд рднреА рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдбреЗрдЯрд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, S3ToSnowflakeOperator рдЬреИрд╕реЗ рдкреНрд░реАрдмрд┐рд▓реНрдЯ рдСрдкрд░реЗрдЯрд░ рд╕реЗ S3 рд╕реЗ Snowflake рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдореЗрдВ рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЕрдВрддрддрдГ, рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП DbtCloudRunJobOperator рджреНрд╡рд╛рд░рд╛ рдХреЛрдИ DBT рдЬреЙрдм рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЖрдкрдХреЛ рдЗрд╕ DAG рдХреЛ рдордирдЪрд╛рд╣реЗ рдЗрдВрдЯрд░рд╡рд▓ рдкрд░ рд╢реЗрдбреНрдпреВрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдлреЗрд▓реНрдпреЛрд░ рдХреЛ рд╢рд╛рд▓реАрдирддрд╛ (рдкрд░ рджреГрд╢реНрдпрддрд╛) рд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдиреАрдЪреЗ рджрд┐рдП рдбрд╛рдпрдЧреНрд░рд╛рдо рдкрд░ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ!

рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ Airflow рдПрдХ рдХреНрд▓рд╛рдЙрдб рд╕реНрдЯреЛрд░реЗрдЬ рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдФрд░ рдПрдХ рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕тАФрджреЛрдиреЛрдВ рд╕реЗ рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░ рд░рд╣рд╛ рд╣реИред рдЗрд╕ DAG рдХреЗ рд╕рдлрд▓ рдирд┐рд╖реНрдкрд╛рджрди рд╣реЗрддреБ рдпреЗ рд╕рдВрд╕рд╛рдзрди рдореМрдЬреВрдж рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП рдФрд░ рдХрдиреЗрдХреНрд╢рдВрд╕ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рдЪрд╛рд╣рд┐рдПред рдКрдкрд░ рдХреЗ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдбрд╛рдпрдЧреНрд░рд╛рдо рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдЯрд╛рд╕реНрдХ рдХреЗ рдиреАрдЪреЗ рджрд┐рдП рдЖрдЗрдХреЙрдиреНрд╕ рд╕реЗ рдЗрдиреНрд╣реЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдФрд░ рдмрддрд╛рдЗрдП: рдпреЗ рдХреБрдЫ рд╕рдмрд╕реЗ рдЖрдо Airflow рдЗрдВрдЯрд░рд╡реНрдпреВ рдкреНрд░рд╢реНрди рд╣реИрдВтАФрдЬреЛ рд╕реВрдХреНрд╖реНрдо рддрдХрдиреАрдХреА рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЗ рдмрдЬрд╛рдп рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп DAG рдбрд┐рдЬрд╝рд╛рдЗрди рдФрд░ рдЗрдореНрдкреНрд▓реАрдореЗрдВрдЯреЗрд╢рди рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИрдВред рдЗрди рдкреНрд░рд╢реНрдиреЛрдВ рдореЗрдВ, рдХреБрдЫ рдмрд╛рддреЗрдВ рдзреНрдпрд╛рди рд░рдЦреЗрдВ:
- DAG рдХреЛ рд╕реНрдкрд╖реНрдЯ, рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЯрд╛рд╕реНрдХреНрд╕ рдореЗрдВ рдмрд╛рдБрдЯреЗрдВред рдЗрд╕ рдХреЗрд╕ рдореЗрдВ, рдЗрдВрдЯрд░рд╡реНрдпреВрдЕрд░ рддреАрди рдЯрд╛рд╕реНрдХреНрд╕ рд╡рд╛рд▓рд╛ DAG рджреЗрдЦрдирд╛ рдЪрд╛рд╣реЗрдЧрд╛ред
- рд╡реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЯреВрд▓реНрд╕ рдмрддрд╛рдПрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдЗрд╕ DAG рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдкрд░ рдмрд╣реБрдд рд╡рд┐рд╕реНрддрд╛рд░ рдореЗрдВ рди рдЬрд╛рдПрдБред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк
DbtCloudRunJobOperatorрдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЗрд╕рдХрд╛ рдЬрд╝рд┐рдХреНрд░ рдХрд░реЗрдВтАФрдкрд░ рддрдм рддрдХ рд╡рд┐рд╕реНрддрд╛рд░ рди рдХрд░реЗрдВ рдЬрдм рддрдХ рдкреВрдЫрд╛ рди рдЬрд╛рдПред - рдХреБрдЫ рд╕рдВрднрд╛рд╡рд┐рдд рдЕрдбрд╝рдЪрдиреЛрдВ рдпрд╛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдмрд╛рддреЛрдВ рдХрд╛ рдЬрд╝рд┐рдХреНрд░ рдХрд░реЗрдВтАФрдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рдкрд╛рдЗрдкрд▓рд╛рдЗрдВрд╕ рдмрдирд╛рддреЗ рд╕рдордп рдЖрдк edge рдФрд░ corner cases рд╕рдВрднрд╛рд▓рдиреЗ рдХрд╛ рдЕрдиреБрднрд╡ рд╡ рдЬрд╛рдЧрд░реВрдХрддрд╛ рд░рдЦрддреЗ рд╣реИрдВред
21. рдкрд╛рд░рдВрдкрд░рд┐рдХ рдбреЗрдЯрд╛ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рд╡рд░реНрдХрдлрд╝реНрд▓реЛрдЬрд╝ рдХреЗ рдмрд╛рд╣рд░, Apache Airflow рдХрд╛ рдЙрдкрдпреЛрдЧ рдбреЗрдЯрд╛ рдЯреАрдореЗрдВ рдФрд░ рдХрд┐рди рддрд░реАрдХреЛрдВ рд╕реЗ рдХрд░ рд░рд╣реА рд╣реИрдВ?
рдЙрддреНрддрд░: Airflow рдХреА рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд┐рд▓рд┐рдЯреА рдФрд░ рдбреЗрдЯрд╛ рд╕рдореБрджрд╛рдп рдореЗрдВ рдмрдврд╝рддреА рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рдиреЗ рдЗрд╕реЗ рд╕рд┐рд░реНрдл рдбреЗрдЯрд╛ рдЗрдВрдЬреАрдирд┐рдпрд░реНрд╕ рд╕реЗ рдкрд░реЗ рднреА рдкрд╕рдВрджреАрджрд╛ рдЯреВрд▓ рдмрдирд╛ рджрд┐рдпрд╛ рд╣реИред рдбреЗрдЯрд╛ рд╕рд╛рдЗрдВрдЯрд┐рд╕реНрдЯреНрд╕ рдФрд░ рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рдЗрдВрдЬреАрдирд┐рдпрд░реНрд╕ Airflow рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдкрдиреЗ рдореЙрдбрд▓реЛрдВ рдХреЛ рдЯреНрд░реЗрди (рдФрд░ рд░реА-рдЯреНрд░реЗрди) рдХрд░рдиреЗ рдФрд░ рд╕рдВрдкреВрд░реНрдг MLOps рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВред AI рдЗрдВрдЬреАрдирд┐рдпрд░реНрд╕ рднреА рдЕрдм рдЕрдкрдиреЗ рдЬрдирд░реЗрдЯрд┐рд╡ AI рдореЙрдбрд▓реЛрдВ рдХреЛ рдореИрдиреЗрдЬ рдФрд░ рд╕реНрдХреЗрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Airflow рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд▓рдЧреЗ рд╣реИрдВтАФOpenAI, OpenSearch рдФрд░ Pinecone рдЬреИрд╕реЗ рдЯреВрд▓реНрд╕ рдХреЗ рдирдП рдЗрдВрдЯреАрдЧреНрд░реЗрд╢рдВрд╕ рдХреЗ рд╕рд╛рдеред
рдФрд░ рдмрддрд╛рдЗрдП: рдкрд╛рд░рдВрдкрд░рд┐рдХ рдбреЗрдЯрд╛ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рдкрд╛рдЗрдкрд▓рд╛рдЗрдВрд╕ рдХреЗ рдмрд╛рд╣рд░ рдлрд▓рдирд╛-рдлреВрд▓рдирд╛ рд╢рд╛рдпрдж Airflow рдХреЗ рд╢реБрд░реБрдЖрддреА рдирд┐рд░реНрдорд╛рддрд╛рдУрдВ рдХреА рдХрд▓реНрдкрдирд╛ рдореЗрдВ рдирд╣реАрдВ рдерд╛ред рдкрд░ Python рдФрд░ рдУрдкрди-рд╕реЛрд░реНрд╕ рджрд░реНрд╢рди рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдХрд░, Airflow рдиреЗ рддреЗрдЬрд╝реА рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛ рд░рд╣реЗ рдбреЗрдЯрд╛/AI рд╕реНрдкреЗрд╕ рдХреА рдЬрд╝рд░реВрд░рддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреБрдж рдХреЛ рдмрдврд╝рд╛рдпрд╛ рд╣реИред рдЬрдм рдкреНрд░реЛрдЧреНрд░рд╛рдордореИрдЯрд┐рдХ рдЯрд╛рд╕реНрдХреНрд╕ рдХреЛ рд╢реЗрдбреНрдпреВрд▓ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╣реЛ, рддреЛ Airflow рд╢рд╛рдпрдж рдХрд╛рдо рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЯреВрд▓ рд╣реИ!
рдирд┐рд╖реНрдХрд░реНрд╖
рд╢рд╛рдирджрд╛рд░ рдХрд╛рдо! рдЖрдкрдиреЗ рдореБрд╢реНрдХрд┐рд▓ рдЪрд░рдг рдкрд╛рд░ рдХрд░ рд▓рд┐рдпрд╛ред рдКрдкрд░ рджрд┐рдП рдкреНрд░рд╢реНрди рдХрдард┐рди рд╣реИрдВ, рдкрд░ Airflow-рдХреЗрдВрджреНрд░рд┐рдд рддрдХрдиреАрдХреА рдЗрдВрдЯрд░рд╡реНрдпреВ рдореЗрдВ рдкреВрдЫреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЕрдзрд┐рдХрддрд░ рд╡рд┐рд╖рдпреЛрдВ рдХреЛ рд╕рдореЗрдЯрддреЗ рд╣реИрдВред
рдЙрдкрд░реЛрдХреНрдд рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, Airflow рдЗрдВрдЯрд░рд╡реНрдпреВ рдХреА рддреИрдпрд╛рд░реА рдХрд╛ рдПрдХ рд╢реНрд░реЗрд╖реНрда рддрд░реАрдХрд╛ рд╣реИтАФAirflow рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдЕрдкрдиреА рдЦреБрдж рдХреА рдбреЗрдЯрд╛ рдкрд╛рдЗрдкрд▓рд╛рдЗрдВрд╕ рдмрдирд╛рдирд╛ред
рдХреЛрдИ рдРрд╕рд╛ рдбреЗрдЯрд╛рд╕реЗрдЯ рдЦреЛрдЬреЗрдВ рдЬреЛ рдЖрдкрдХреЛ рд░реБрдЪрд┐рдХрд░ рд▓рдЧреЗ, рдФрд░ рдЕрдкрдиреА ETL (рдпрд╛ ELT) рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд╢реВрдиреНрдп рд╕реЗ рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВред TaskFlow API рдФрд░ рдкрд╛рд░рдВрдкрд░рд┐рдХ рдСрдкрд░реЗрдЯрд░реНрд╕тАФрджреЛрдиреЛрдВ рдХрд╛ рдЕрднреНрдпрд╛рд╕ рдХрд░реЗрдВред рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ Airflow connections рд╕реЗ рд╕реНрдЯреЛрд░ рдХрд░реЗрдВред callbacks рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдлреЗрд▓реНрдпреЛрд░ рдкрд░ рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдЖрдЬрд╝рдорд╛рдПрдБ, рдФрд░ рдЕрдкрдиреЗ DAG рдХреЛ рдпреВрдирд┐рдЯ рдЯреЗрд╕реНрдЯреНрд╕ рдФрд░ рдПрдВрдб-рдЯреВ-рдПрдВрдб рдЯреЗрд╕реНрдЯрд┐рдВрдЧ рд╕реЗ рдкрд░рдЦреЗрдВред рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдгтАФрдЬреЛ рдХрд╛рдо рдЖрдкрдиреЗ рдХрд┐рдпрд╛, рдЙрд╕реЗ рдбреЙрдХреНрдпреВрдореЗрдВрдЯ рдХрд░реЗрдВ рдФрд░ рд╕рд╛рдЭрд╛ рдХрд░реЗрдВред
рдРрд╕рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рди рдХреЗрд╡рд▓ Airflow рдореЗрдВ рджрдХреНрд╖рддрд╛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рд╕реАрдЦрдиреЗ рдФрд░ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрдиреЗ рдХреЗ рдкреНрд░рддрд┐ рдЖрдкрдХрд╛ рдЙрддреНрд╕рд╛рд╣ рднреАред рдпрджрд┐ рдЖрдкрдХреЛ рдЕрднреА рднреА рдмреЗрд╕рд┐рдХ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдкрд░ рдПрдХ рдкреНрд░рд╛рдЗрдорд░ рдЪрд╛рд╣рд┐рдП, рддреЛ рд╣рдорд╛рд░рд╛ Introduction to Airflow in Python рдХреЛрд░реНрд╕, рд╣рдорд╛рд░рд╛ Airflow рдмрдирд╛рдо Prefect рддреБрд▓рдирд╛, рдФрд░ рд╣рдорд╛рд░рд╛ Getting Started with Apache Airflow рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рджреЗрдЦреЗрдВред
рд╢реБрднрдХрд╛рдордирд╛рдПрдБ, рдФрд░ рд╣реИрдкреНрдкреА рдХреЛрдбрд┐рдВрдЧ!
рдбреЗрдЯрд╛ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рдЗрдВрдЯрд░рд╡реНрдпреВ рдХрдард┐рди рд╣реЛрддреЗ рд╣реИрдВред рдХрд┐рд╕реА рдХрдВрдкрдиреА рдХреЗ рдбреЗрдЯрд╛ рдЗрдХреЛрд╕рд┐рд╕реНрдЯрдо рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реБрдП, рдЬреЙрдм рд╡рд┐рд╡рд░рдг рдореЗрдВ рджрд░реНрдЬрдиреЛрдВ рдЯреВрд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ Airflow рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рддреЛ рдЖрдкрдХреА рдХрд┐рд╕реНрдордд рдЕрдЪреНрдЫреА рд╣реИ! рдиреАрдЪреЗ, рд╣рдордиреЗ Airflow рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рдПрдХ рддрдХрдиреАрдХреА рдЗрдВрдЯрд░рд╡реНрдпреВ рдореЗрдВ рдЖрдкрдХреА рдорджрдж рдХреЗ рд▓рд┐рдП рд╡рд┐рд╕реНрддреГрдд рдЧрд╛рдЗрдб рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рд╣реИред
рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрдХреНрд╢рди рдореЗрдВ, рдРрд╕реЗ рдХрдИ рдкреНрд░рд╢реНрди рд╣реЛрдВрдЧреЗ рдЬреИрд╕реЗ рдПрдХ рдЗрдВрдЯрд░рд╡реНрдпреВрдЕрд░ рдкреВрдЫ рд╕рдХрддрд╛ рд╣реИред рд╣рд░ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рдКрдкрд░реА-рд╕реНрддрд░ рдХреА рд╕рдордЭ рдФрд░ рддрдХрдиреАрдХреА рддрд░реНрдХтАФрджреЛрдиреЛрдВ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреБрдЫ рдкреНрд░рд╢реНрдиреЛрдВ рдореЗрдВ тАЬрдФрд░ рдмрддрд╛рдЗрдПтАЭ рдХрд╛ рд╕реНрдирд┐рдкреЗрдЯ рд╣реИред рдпрд╣ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдФрд░ рд╕реВрдХреНрд╖реНрдо рд╡рд┐рд╡рд░рдг рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЗ Airflow рдХреМрд╢рд▓ рдХреЛ рдЧрд╣рд░рд╛ рдХрд░реЗрдЧрд╛ рдФрд░ рдЗрдВрдЯрд░рд╡реНрдпреВрдЕрд░ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдЧрд╛ред
рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдкреНрд░рддреНрдпреЗрдХ рд╣реЗрдбрд┐рдВрдЧ рдореЗрдВ рдЗрдВрдЯрд░рд╡реНрдпреВ рдХреЗ рджреМрд░рд╛рди рдкреВрдЫреЗ рдЬрд╛ рд╕рдХрдиреЗ рд╡рд╛рд▓реЗ Airflow рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ тАЬрдкреНрд░рдХрд╛рд░тАЭ рдкрд░ рдлреЛрдХрд╕ рд╣реИтАФрдЬреИрд╕реЗ Airflow рдХреЗ рдмреЗрд╕рд┐рдХреНрд╕ рдФрд░ рдХреЛрд░ рдХреЙрдиреНрд╕реЗрдкреНрдЯ, DAG рд▓рд┐рдЦрдиреЗ рдХреА рдмреБрдирд┐рдпрд╛рдж, рдЙрдиреНрдирдд рд╡рд┐рд╖рдп рдФрд░ рддрдХрдиреАрдХреЗрдВ, рдФрд░ рдкрд░рд┐рджреГрд╢реНрдп-рдЖрдзрд╛рд░рд┐рдд рдкреНрд░рд╢реНрдиред рдЖрдЗрдП рд╢реБрд░реВ рдХрд░реЗрдВ!