Storytelling with Data
CROSS- COMMUNICATION between Tasks in AIRFLOW
(AIRFLOW XCOMS)
xcom - bu tasklar orasida malumot almashish uchun ishlatiladigan mexanizm.
U quyidagi qismlardan iborat:
key (kalit nomi)
value (almashilayotgan ma’lumot)
task_id (ma’lumotni yuborgan task)
dag_id (task qaysi DAGga tegishli)
execution_date (qaysi data interval uchun bajarilgan)
XCOM qiymati odatda JSON formatga serialize qilinadi. Bu har qanday obyektlarni emas, faqat JSON bilan mos keladigan turlarni saqlay oladi.
PICKLE istalgan code uchun ishlaydi shu sabab xavfsiz emas.
1.XCOM PUSH qilish
bunda malumotlarni uzatish uchun uni push qilamiz yani bazaga yozamiz
from airflow import DAG
from airflow.decorators import task
with DAG(...) as dag:
@task()
def sender1():
# 'data' key ostida brand qiymatini yuborish
ti.xcom_push(key='data', value={'brand': 'APPLE'})
xuddi shu natijaga return_value orqali push
from airflow import DAG
from airflow.decorators import task
with DAG(...) as dag:
@task()
def sender2():
# 'return_value' keyi avtomatik tarzda ishlatiladi
return {'brand': 'Apple'}
2.Bazadan yuborilgan qiymatni olish
from airflow import DAG
from airflow.decorators import task
with DAG(...) as dag:
@task()
def receiver1():
# sender task'dan 'data' keyidagi qiymatni olish
ti.xcom_pull(task_ids='sender', key='data')
bizda hozir Standart yani default settings bilan XCOM yani:
• key='return_value' bo’ladi
• Aynan shu DAG run ichida
• Ayni bir DAG dan olinadi
lekin Moslashtirib olishimiz ham mumkin:
• Boshqa DAG’dan (dag_id ni korsatib)
• Bir nechta tasklardan (task_ids=['taskA', 'taskB'])
• Oldingi barcha DAG runlardan (include_prior_dates=True bilan)
Bogliqliklar (Dependencies)
XCOM lar implicit (bilvosita) bogliqliklar hosil qiladi.
Agar Task C, Task A yuborgan XCOM ni ishlatsa, ular orasida avtomatik bogliqlik hosil boladi.shuni
Ikki usulda yozish mumkin:
1.Graph strukturasi orqali
sender() >> receiver()
2.Argument orqali uzatish
receiver(sender())
XCOM Size Limitations (Hajm Cheklovlari )
XCOM qiymatlari bazada saqlanadi shuning uchun hajm cheklovlari mavjud:
SQLite: 2 GB
PostgreSQL: 1 GB
MySQL: 64 MB
demak biz XCOM qiymatlarni saqlashimiz togrimi ???
1 · 765 ·