簡體   English   中英

如何對來自用戶界面的氣流中的DAG進行參數化?

[英]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_1compute_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM