[英]How to paramaterize DAGs in airflow from UI?
上下文:我已經定義了一個氣流DAG,它基於名為org
的參數對實體的某些數據執行操作compute_metrics
。 在像myapi.compute_metrics(org)
類的東西下面被調用。 此流程將主要在臨時基礎上運行。
問題:當我從氣流UI手動觸發DAG時,我希望能夠選擇要對其運行流程的org
。
我能想到的最直接的解決方案是生成n
不同的DAG,每個組織一個。 DAG的id
將為: compute_metrics_1
, compute_metrics_2
等,然后當我需要觸發單個org
計算指標時,我可以為該組織選擇DAG。 當我添加組織以及添加更多類型的計算時,這不會擴展。
我已經進行了一些研究,似乎可以為氣流創建一個燒瓶藍圖,據我了解,該藍圖可擴展UI。 在此擴展的UI中,我可以添加輸入組件(例如文本框)以選擇組織,然后將其作為conf
傳遞給由藍圖手動創建的DagRun
。 那是對的嗎? 我正在想像我可以寫一些東西:
session = settings.Session() execution_date = datetime.now() run_id = 'external_trigger_' + execution_date.isoformat() trigger = DagRun( dag_id='general_compute_metrics_needs_org_id', run_id=run_id, state=State.RUNNING, execution_date=execution_date, external_trigger=True, conf=org_ui_component.text) # pass the org id from a component in the blueprint session.add(trigger) session.commit() # I don't know if this would actually be scheduled by the scheduler
我的主意聽起來不錯嗎? 有沒有更好的方法來實現我想要的?
我已經進行了一些研究,似乎可以為氣流創建一個燒瓶藍圖,據我了解,該藍圖可擴展UI。
該藍圖擴展了API。 如果您想要一些用戶界面,則需要提供模板視圖。 實現此功能的最完整的方法是開發自己的Airflow Plugin 。
如果要手動創建DagRun
,則可以將此觸發器用作參考。 為簡單起見,我將使用API觸發Dag。
特別是關於您的問題,我將有一個DAG compute_metrics
從Airflow Variable讀取org
。 它們是全局的,可以動態設置。 您可以在變量名前添加DagRun id之類的前綴,以使其唯一,從而確保dag-concurrent安全。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.