Airflow 自动日期

Airflow 自动日期,airflow,airflow-scheduler,Airflow,Airflow Scheduler,我有一个DAG,我想用来回填我的数据库表 from airflow import DAG from airflow.operators.postgres_operator import PostgresOperator from datetime import datetime, timedelta args = { 'owner': 'airflow', 'depends_on_past': False, 'start_date': datetime(2018, 4,

我有一个DAG,我想用来回填我的数据库表

from airflow import DAG
from airflow.operators.postgres_operator import PostgresOperator
from datetime import datetime, timedelta

args = {
    'owner': 'airflow',
    'depends_on_past': False,
    'start_date': datetime(2018, 4, 1),
    'retry_delay': timedelta(minutes=1),
}

dag = DAG(dag_id='airflow_backfill', default_args=args, schedule_interval='@daily')

"""
    Task for inserting data per day
"""

task1 = PostgresOperator(
    task_id='insert_new_row',
    postgres_conn_id='aws_pg',
    sql="INSERT INTO airflow_test(date_at) VALUES('2018-04-01')",
    dag=dag,
)

task2 = PostgresOperator(
    task_id='update_team_name',
    postgres_conn_id='aws_pg',
    sql="UPDATE airflow_test SET team_name = (SELECT team_name FROM teams ORDER BY RANDOM() LIMIT 1) WHERE team_name is NULL",
    dag=dag,
)

task1.set_downstream(task2)
我将从2018年4月1日起在数据库中插入一行,但问题是我给出了硬编码变量处的日期

我的问题是,是否有任何方法可以将回填日期作为插入值?我想在进行回填时自动设置“date_at”的值,但尚未找到任何气流环境/配置变量,我无法从中自动获取回填日期


我使用的是ApacheAirflow 1.9.0。谢谢。

编辑:您应该能够使用jinja模板获取变量执行日期:

task1 = PostgresOperator(
    task_id='insert_new_row',
    postgres_conn_id='aws_pg',
    sql="INSERT INTO airflow_test(date_at) VALUES('{{ ds }}')",
    dag=dag,
)

已编辑:您应该能够使用jinja模板获取变量执行日期:

task1 = PostgresOperator(
    task_id='insert_new_row',
    postgres_conn_id='aws_pg',
    sql="INSERT INTO airflow_test(date_at) VALUES('{{ ds }}')",
    dag=dag,
)

我建议使用
{{ds}
,因为它将根据请求将输出格式化为
YYYY-MM-DD
。由于
execution\u date
是一个日期时间,我对格式不太确定。我也在想同样的事情,但是{{ds}}不是今天的日期时间戳吗?对于执行日期,您可以使用{{execution\u date}.strftime(%Y-%m-%d)?从引用页:
{{ds}
:执行日期为YYYY-MM,谢谢。我知道这是可能的。没有太多地尝试Jinja模板。编辑答案以反映您的输入。我建议使用
{{ds}
,因为它将根据要求将输出格式化为
YYYY-MM-DD
。由于
execution\u date
是一个日期时间,我对格式不太确定。我也在想同样的事情,但是{{ds}}不是今天的日期时间戳吗?对于执行日期,您可以使用{{execution\u date}.strftime(%Y-%m-%d)?从引用页:
{{ds}
:执行日期为YYYY-MM,谢谢。我知道这是可能的。没有太多地尝试Jinja模板。编辑答案以反映您的输入。