В Apache Airflow есть 2 ключевые даты, которые нужно понимать.
start_date
execution_date
Start Date это дата начала от которой следует начинать запускать DAG согласно расписания schedule_interval
.
Execution Date это дата выполнения конкретного запуска. В примере выше у меня было 13 запусков (у вас их будет больше, т.к. курс вы будете изучать в другое время). 13 запусков, а значит 13 execution_date, а именно:
1. 20.01.2020
2. 21.01.2020
3. 22.01.2020
4. 23.01.2020
5. 24.01.2020
6. 25.01.2020
7. 26.01.2020
8. 27.01.2020
9. 28.01.2020
10. 29.01.2020
11. 30.01.2020
12. 31.01.2020
13. 01.02.2020
Execution date можно получить, обратившись к контексту выполнения. Контекст можно получить, вызвав функцию get_current_context
. Для примера работы с execution_date
я создал новый DAG по аналогии с предыдущим, но немного модифицировал код оператора:
import datetime as dt
from airflow.models import DAG
from airflow.operators.python import PythonOperator
from airflow.operators.python import get_current_context
default_args = {
'owner': 'airflow',
'start_date': dt.datetime(2021, 1, 20),
}
def even_only():
context = get_current_context()
execution_date = context['execution_date']
if execution_date.day % 2 != 0:
raise ValueError(f'Odd day: {execution_date}')
with DAG(dag_id='first_dag_execution_date',
schedule_interval='@daily',
default_args=default_args) as dag:
even_only = PythonOperator(
task_id='even_only',
python_callable=even_only,
dag=dag,
)
Таски будут падать через день, т.е. каждый нечетный день.
На скриншоте второй сверху )
По какой ссылке хранятся эти логи?
Необходимо зайти в историю выполнения (кружки в главной интерфейсе)
В новой версии Airflow код чуть другой будет. Теперь эта дата называется logical date и достается она так get_current_context()['logical_date'], ну илиесли как автор показал context = get_current_context() execution_date = context['logical_date']
В более новых версиях Airflow разработчики стремились сделать систему более понятной. Переход от термина execution_date к logical_date помогает подчеркнуть, что дата указывает на запланированное время выполнения задачи, а не на момент фактического выполнения. Execution Date: Ранее использовавшийся термин мог подразумевать, что это дата фактического запуска, что вызывало путаницу. В новой версии системы фактическое время выполнения можно получить из других контекстов (например, через start_date или end_date. Возможно это кому то поможет. Всем Удачи!
LeoPVL 1 Июнь 2021
А где за 27-е?)