Airflow Idempotency

Airflow tasklarina database transaction'lari gibi gormek gerekir. Hicbir zaman yarim output ortaya koymayiniz ve her calistiginda ayni input icin ayni outputu verecek sekilde (idempotent) tasarlayiniz. Neden? Cunku bu task fail edebilir ve tekrar calisabilir, bu durumda:

1. INSERT kullanmayin bunun yerinde UPSERT kullanin (eger ki database islemi yapiliyor ise task icerisinde)

2. Sadece belirli bir partition'a yazin veya partition'dan okuyun. Sakin ola ki en son guncel datayi okuyayim demeyin. Bir airflow taskinin ne zaman calisacagi garanti edilemez. Yani farzi misal 1 ay sonra bir farkettiniz ki aslinda bir ETL job'unda bug var. Bu sefer tum gecmisi backfill etmeniz gerekecek. Bu durumda task icerisinde enson datayi oku derseniz olay patlar. Bunu yerine executin_data argumani kullanilmalidir ki Airflow backfill ederken verilen bir tarih icin calisan dag gerekli partition'lari okuyabilsin / yazabilsin. 

Ozetle bir dag'i verilen argumanlar icin 50 kere de calistirsaniz, sonucataki sistem state'i ayni olmasi gerekir. 









Yorumlar

Bu blogdaki popüler yayınlar

Python'da Multithreading ve Multiprocessing

Threat Modeling 1

Encoding / Decoding