我经常下载的文件在文件名中有一个日期。
csat_surveys_2017_03_05.csv
03062017_roster.csv
我的代码单独处理此问题。
我(并且应该)是否可以使用气流计划日期来代替对此逻辑进行编码的需要?每天,我的任务都计划运行。我将该计划日期(可能减去1天)并使用该值作为参数传递作为文件名的一部分进行读取(在pandas中)。如果是这样,我可以看一个明确的例子,我可以用作模板吗?
这是一种更好的方法吗?如果文件丢失或延迟几天,我会想要任务失败,然后每天继续尝试直到成功或直到我注意到并且可以提高问题给我们的客户)?
答案 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
中找到有关如何参数化任务的详细信息