Когда именно Airflow оценивает определение графика и почему? - PullRequest
0 голосов
/ 07 ноября 2019

Мне любопытно, почему следующий код создает таблицу, в которой столбец another, основанный на datetime, растет примерно с тем же темпом, что и one, который основан на ts.

Я всегда думал, что существует разница между загрузкой графика и его выполнением. Идея состоит в том, что datetime.now() оценивается, когда Airflow загружает график в основную память. После этого он остается неизменным до тех пор, пока Airflow не решит перезагрузить график.

Буду признателен, если кто-нибудь сможет разъяснить, как Airflow работает в этом отношении.

from datetime import datetime

from airflow import DAG
from airflow.contrib.operators.bigquery_operator import BigQueryOperator

config = {
    'dag_id': 'example',
    'schedule_interval': '*/1 * * * *',
    'start_date': datetime(2019, 11, 1),
    'default_args': {
        'owner': 'example',
        'depends_on_past': False,
        'retries': 1,
    },
    'catchup': False,
}
graph = DAG(**config)

sql = 'SELECT TIMESTAMP("{one}") AS one, TIMESTAMP("{another}") AS another'
create_players = BigQueryOperator(
    task_id='append',
    sql=sql.format(one='{{ ts }}', another=datetime.now().strftime('%Y-%m-%d %H:%M:%S')),
    destination_dataset_table='example.example.example',
    write_disposition='WRITE_APPEND',
    create_disposition='CREATE_IF_NEEDED',
    use_legacy_sql=False,
    dag=graph,
)

if __name__ == '__main__':
    graph.cli()

Уже есть аналогичный вопрос с ответом , но мне не ясно, что подразумевается под «оценкой при каждом запуске планировщика».

Если это что-то делается периодически, какой смысл повторятьэта работа, если не было внесено никаких изменений в файл, определяющий график?

...