Airflow FileSensor的任何示例?

时间:2019-02-20 16:55:38

标签: python airflow

谁能向我指出如何使用Airflow FileSensor的示例? 我已经用谷歌搜索,还没有找到任何东西。任何示例就足够了。我的用例很简单:

等待调度的DAG将文件拖放到路径中,FileSensor任务将其拾取,读取内容并进行处理。

2 个答案:

答案 0 :(得分:2)

FileSensor任务的简单示例:

second_task = FileSensor(
                 task_id="file_sensor_task_id",
                 filepath="{{ task_instance.xcom_pull(task_ids='get_filepath_task') }}",
                 #fs_conn_id="fs_default" # default one, commented because not needed
                 poke_interval= 20,
                 dag=dag
              )

在这里,我使用filepath作为前一个PythonOperator task_id(命名为get_filepath_task)的返回值作为xcom_pull传递。 但这可以是您要检查其存在的文件路径或目录的任何字符串。

fs_conn_id参数是您在“ UI管理员/连接”部分中可用的连接的字符串名称。

fs_conn_id的默认值为"fs_default"(您可以在FileSensor类运算符的代码中看到它)。检查UI管理员/连接,您将找到它。

如果要检查本地是否存在文件或目录,可以跳过传递fs_conn_id并仅传递参数filepath

poke_interval继承自BaseSensorOperator,它指示作业在两次尝试之间应等待的时间(以秒为单位)。默认值为60秒。

答案 1 :(得分:1)

来自documentationsource code

from airflow.contrib.sensors.file_sensor import FileSensor
from airflow.operators.dummy_operator    import DummyOperator

import datetime
import airflow

# https://airflow.apache.org/code.html#airflow.models.BaseOperator
default_args = {
    "depends_on_past" : False,
    "start_date"      : airflow.utils.dates.days_ago( 1 ),
    "retries"         : 1,
    "retry_delay"     : datetime.timedelta( hours= 5 ),
}

with airflow.DAG( "file_sensor_test_v1", default_args= default_args, schedule_interval= "*/5 * * * *", ) as dag:

    start_task  = DummyOperator(  task_id= "start" )
    stop_task   = DummyOperator(  task_id= "stop"  )
    sensor_task = FileSensor( task_id= "my_file_sensor_task", poke_interval= 30, fs_conn_id= <path>, filepath= <file or directory name> )

start_task >> sensor_task >> stop_task