谁能向我指出如何使用Airflow FileSensor的示例? 我已经用谷歌搜索,还没有找到任何东西。任何示例就足够了。我的用例很简单:
等待调度的DAG将文件拖放到路径中,FileSensor任务将其拾取,读取内容并进行处理。
答案 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)
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