在AIRFLOW中访问修改后的气流变量作为S3传感器的自定义参数

时间:2017-07-16 16:54:31

标签: python airflow

让我们看看我是否可以就此问题解释自己。

请参阅,我收到的客户格式错误的S3文件。例如,日期显示为低“破折号”,如“2017_07_10”。

由于我想访问它们以便能够下载它们,首先我有一个任务是气流中的S3传感器。它看起来像这样:

xxx = S3KeySensor(
    task_id='task_name',
    bucket_key=BUCKET_KEY,
    wildcard_match=True,
    params={'yesterday_ds_formatted': ????},
    provide_context=True,
    bucket_name=BUCKET_NAME,
    s3_conn_id=S3_CONN_ID,
    timeout=18 * 60 * 60,
    poke_interval=120,
    dag=dag)

在Airflow控制台的Variables部分中,我有一个带有模板变量{{yesterday_ds_formatted}}的bucket_key。

e.g。 :'folder1 / folder2 / folder3 / blablablablabla - {{params.yesterday_ds_formatted}} *。csv

我需要修改该模板变量或某些东西,以便它抓取{{yesterday_ds}}并用“_”替换“ - ”。

我该怎么办?我无法让它发挥作用...... 我在设置参数时尝试调用自定义python函数,但后来我无法访问“ds”,甚至没有使用kwargs。似乎我无法事先访问模板变量。

谢谢!

1 个答案:

答案 0 :(得分:0)

如果我理解这一点,你想使用jinja模板作为bucket_key参数,但S3KeySensor不支持。

一种简单的方法是从S3KeySensor继承自定义传感器,如下所示:

TemplatedS3KeySensor(S3KeySensor):
  template_fields = ('bucket_key',)