在Airflow中使用参数的示例?

时间:2017-03-08 17:57:24

标签: airflow

我经常下载的文件在文件名中有一个日期。

csat_surveys_2017_03_05.csv
03062017_roster.csv

我的代码单独处理此问题。

  • 将已处理文件列表中的日期(基于文件名切片)与应存在的预期日期(某个日期范围直到当前日期)进行比较
  • 对于我处理的每个文件,将文件名添加到数据库表中,只处理尚未添加到该表的新文件

我(并且应该)是否可以使用气流计划日期来代替对此逻辑进行编码的需要?每天,我的任务都计划运行。我将该计划日期(可能减去1天)并使用该值作为参数传递作为文件名的一部分进行读取(在pandas中)。如果是这样,我可以看一个明确的例子,我可以用作模板吗?

这是一种更好的方法吗?如果文件丢失或延迟几天,我会想要任务失败,然后每天继续尝试直到成功或直到我注意到并且可以提高问题给我们的客户)?

1 个答案:

答案 0 :(得分:0)

我会说是的,使用execution_date可能是最好的做法。

要访问它,您需要一个模板字段。一些默认运算符已经有了这些运算符,或者你可能想要创建自己的运算符,它们看起来像这样:

在您的DAG中,您将完成以下任务:

my_task = MyOperator(
    task_id='t1',
    filename='prefix_{{ ds }}_suffix')

ds是用于访问execution_date参数的气流宏,作为日期的字符串表示。

你的MyOperator看起来像是:

class MyOperator(BaseOperator):
    template_fields = ('filename')

    def __init__(self, filename)
        self.filename = filename

    def execute(self, context):
        download_file(self.filename)
        do_other_stuff()

您可以在宏部分https://airflow.incubator.apache.org/code.html#macros

中找到有关如何参数化任务的详细信息