Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3
Halaman ini menjelaskan cara mengelompokkan tugas di pipeline Airflow menggunakan pola desain berikut:
- Mengelompokkan tugas di grafik DAG.
- Memicu DAG anak dari DAG induk.
- Mengelompokkan tugas dengan operator
TaskGroup
(hanya dengan Airflow 2).
Mengelompokkan tugas di grafik DAG
Untuk mengelompokkan tugas di fase tertentu pada pipeline, Anda dapat menggunakan hubungan antara tugas di file DAG.
Perhatikan contoh berikut:
Dalam alur kerja ini, tugas op-1
dan op-2
dijalankan bersama setelah tugas
awal start
.
Anda dapat melakukannya dengan mengelompokkan tugas bersama dengan pernyataan
start >> [task_1, task_2]
.
Kode berikut memberikan implementasi lengkap DAG di atas:
Aliran udara 2
Aliran udara 1
Memicu DAG anak dari DAG orang tua
Anda dapat memicu satu DAG dari DAG lain dengan
TriggerDagRunOperator
.
Bergantung pada versi Airflow, Anda dapat menemukan operator TriggerDagRunOperator
di modul yang berbeda:
- Untuk Airflow 1.10.*, gunakan modul
airflow.operators.dagrun_operator
. - Untuk Airflow 2, gunakan modul
airflow.operators.trigger_dagrun
.
Perhatikan contoh berikut:
Dalam alur kerja ini, blok dag_1
dan dag_2
mewakili serangkaian tugas yang dikelompokkan bersama dalam DAG terpisah di lingkungan Cloud Composer.
Implementasi alur kerja ini memerlukan dua file DAG terpisah. File DAG yang mengontrol terlihat seperti berikut:
Aliran udara 2
Aliran udara 1
Implementasi DAG turunan, yang dipicu oleh DAG pengendali, akan terlihat seperti berikut:
Aliran udara 2
Aliran udara 1
Anda harus mengupload kedua file DAG di lingkungan Cloud Composer agar alur kerja dapat berfungsi.
Mengelompokkan tugas dengan operator TaskGroup
Di Airflow 2, Anda dapat menggunakan operator TaskGroup
untuk mengelompokkan tugas bersama di DAG.
Tugas yang ditentukan dalam blok TaskGroup
masih menjadi bagian dari DAG utama.
Perhatikan contoh berikut:
Tugas op-1
dan op-2
dikelompokkan bersama dalam satu blok dengan ID
taskgroup_1
.
Implementasi alur kerja ini akan terlihat seperti kode berikut: