Airflow 气流执行间隔-使用执行日期和下一个执行日期定义时间片是否标准?

Airflow 气流执行间隔-使用执行日期和下一个执行日期定义时间片是否标准?,airflow,Airflow,我是气流新手,一直在四处阅读,试图对我的DAG进行编码,以符合该工具的标准。由于大量的警告,我得到了执行日期在时间片开始的要点。我不太确定的是如何处理时间片的结尾 如果我正在运行一个基于时间戳处理记录的日常任务,特别是如果我希望它是幂等的,那么我需要在两端绑定时间片。最清晰的方法是使用execution\u date和next\u execution\u date变量,如下例所示: from datetime import datetime from airflow import DAG fro

我是气流新手,一直在四处阅读,试图对我的DAG进行编码,以符合该工具的标准。由于大量的警告,我得到了执行日期在时间片开始的要点。我不太确定的是如何处理时间片的结尾

如果我正在运行一个基于时间戳处理记录的日常任务,特别是如果我希望它是幂等的,那么我需要在两端绑定时间片。最清晰的方法是使用
execution\u date
next\u execution\u date
变量,如下例所示:

from datetime import datetime
from airflow import DAG
from airflow.providers.postgres.operators.postgres import PostgresOperator

dag = DAG(
    dag_id='time_slice_example',
    start_date=datetime(year=2021, month=2, day=1),
    schedule_interval='0 0 * * *'
)

copy_data = PostgresOperator(
    owner='airflow',
    task_id='copy_time_slice_data',
    sql='''
        INSERT INTO pipeline_tbl (id, text, other)
            SELECT id, text, other FROM daily_tbl
            WHERE data_ts >= {{ execution_date }}
            AND data_ts < {{ next_execution_date }}
    ''',
    postgres_conn_id='my_db_conn',
    dag=dag
)
从日期时间导入日期时间
从气流导入DAG
从afflow.providers.postgres.operators.postgres导入PostgresOperator
dag=dag(
dag_id='time_slice_example',
开始日期=日期时间(年=2021,月=2,日=1),
附表_间隔=0***'
)
复制数据=PostgresOperator(
业主,
任务\u id='copy\u time\u slice\u data',
sql='''
插入管道(id、文本、其他)
从每日列表中选择id、文本、其他
其中数据\u ts>={{execution\u date}
和数据<{{next_execution_date}
''',
postgres_conn_id='my_db_conn',
dag=dag
)
(我使用了一个postgres查询来说明这个示例,但相同的变量和原理适用于任何时间片操作)


所以我的问题是这是否正常?对于所有关于气流时间片的引用,我几乎没有看到这种方法的示例。我可以理解,这可能超出了气流本身的范围,但我想检查一下这是否是一种标准方法,实际上我没有遗漏更合适的方法。

是的,使用
[execution\u date,next\u execution\u date]限定的时间间隔是正确的行为

在《气流2.1》或《气流2.2》中,我们正在研究如何使这一点更加清晰,可能是通过将这些参数设置为类似于
data\u interval\u start
data\u interval\u end

更多的细节正在发生


(来源:我是一名Airflow core开发者。)

谢谢@ash,这太棒了,也是一条有趣的线索。如果我有时间,我会尝试提出一些想法(并解决方法).
data\u interval\u start
data\u interval\u end
对于这些字段来说都是很好的名字!我不会告诉你我浪费了多少时间选择自己的内部名称!:-p