2016-08-09 5 views
1

Aus irgendeinem Grund scheint Airflow den letzten Lauf für einen Tag mit einem wöchentlichen Zeitplanintervall nicht auszulösen.Airflow füllt den letzten Lauf nicht aus

Aktuelles Datum:

$ date 
$ Tue Aug 9 17:09:55 UTC 2016 

DAG:

from datetime import datetime 
from datetime import timedelta 

from airflow import DAG 
from airflow.operators.bash_operator import BashOperator 

dag = DAG(
    dag_id='superdag', 
    start_date=datetime(2016, 7, 18), 
    schedule_interval=timedelta(days=7), 
    default_args={ 
     'owner': 'Jon Doe', 
     'depends_on_past': False 
    } 
) 

BashOperator(
    task_id='print_date', 
    bash_command='date', 
    dag=dag 
) 

Run Scheduler

$ airflow scheduler -d superdag 

Sie insgesamt vier DAG erwarten würde Läuft als der Planer für 7 Verfüllung sollte/18, 7/25, 8/1 und 8/8. Der letzte Lauf ist jedoch nicht geplant.

Airflow DAG Runs

enter image description here

EDIT 1:

Ich verstehe, dass Vineet obwohl das nicht mein Problem zu erklären scheint.

In meinem obigen Beispiel das Startdatum der DAG ist 18. Juli

  • Erste DAG Run: 18. Juli
  • Zweite DAG Run: 25. Juli
  • Third DAG Run: 1. August
  • Vierter DAG-Lauf: 8. Aug. (nicht ausgeführt)

Wo jeder DAG-Durchlauf Daten der vorherigen Woche verarbeitet.

Heute am 9. August würde ich erwarten, dass der vierte DAG-Lauf mit einem Ausführungsdatum vom 8. August ausgeführt wurde, das Daten für die letzte Woche (1. August bis 8. August) verarbeitet, aber nicht.

Antwort

2

Airflow plant immer für die vorherige Periode. Wenn Sie also einen Tag haben, der täglich ausgeführt werden soll, wird am 9. August ein Lauf mit Ausführungsdatum 8. August geplant. In ähnlicher Weise, wenn das Zeitplanintervall wöchentlich ist, wird es am 9. August für eine Woche zurück geplant, d. H. Den 2. August, obwohl dieser am 9. August selbst ausgeführt wird. Dies ist nur Luftstrom Buchhaltung. Sie können dies im Luftstrom Wiki finden (https://cwiki.apache.org/confluence/display/AIRFLOW/Common+Pitfalls):

das Ausführungsdatum Airflow Verständnis als Lösung für ETL Bedürfnisse entwickelt wurde. In der ETL-Welt werden Daten in der Regel zusammengefasst. Also, wenn ich Daten für 2016-02-19 zusammenfassen möchte, würde ich es am 2016-02-20 Uhr GMT tun, das wäre richtig, nachdem alle Daten für 2016-02-19 verfügbar werden. Dieses Datum steht Ihnen sowohl in Jinja als auch in einem Python-Kontext in vielen Formen zur Verfügung, wie hier dokumentiert. Als eine Anmerkung bezieht sich ds auf date_string, nicht auf den Datumsstart, da dies für einige verwirrend sein kann.