Мне любопытно, почему следующий код создает таблицу, в которой столбец 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()
Уже есть аналогичный вопрос с ответом , но мне не ясно, что подразумевается под «оценкой при каждом запуске планировщика».
Если это что-то делается периодически, какой смысл повторятьэта работа, если не было внесено никаких изменений в файл, определяющий график?