气流-如何使用另一个传感器任务中的传感器

时间:2019-05-24 04:57:39

标签: python airflow

我正在尝试检查远程服务器上是否存在文件,如果存在,请检查行计数是否为0。如果行计数大于0,则管道应该继续进行;如果不存在,则需要传感器继续检查(文件名中带有日期,因此第二天新文件可能不为空)

任何人都可以帮助我们阐明如何实现这一点吗?我在想可以从检查行的python函数中使用SFTP传感器吗?如果是这样,我该如何使用另一个传感器?非常感谢

1 个答案:

答案 0 :(得分:0)

您可以制作一个常规传感器来完成这两个任务,这是实现方法的概述,您必须将此文件放在气流内部的plugins文件夹中,然后可以将其导入并用作DAG。

from airflow.operators.sensors import BaseSensorOperator
from airflow.utils.decorators  import apply_defaults
from airflow.plugins_manager   import AirflowPlugin

import requests
import logging
import json

DEFAULT_CONNECTION_DETAILS = { "host": "127.0.0.1", "password": "wololo" }

log = logging.getLogger( __name__ )

class Remote_File_Row_Sensor( BaseSensorOperator ):

    @apply_defaults
    def __init__( self, file_name, connection_details= DEFAULT_CONNECTION_DETAILS, *args, **kwargs ):
        super( Remote_File_Row_Sensor, self ).__init__( *args, **kwargs )
        self.connection_details = connection_details
        self.file_name          = file_name

    def poke( self, context ):
        connection_details   = self.connection_details
        file_name            = self.file_name

        ROW_COUNT = 0

        # Your code here to connect using SFTP and read the file for the row count

        if ROW_COUNT == 0:
            return False
        else:
            return True

class Remote_File_Row_Plugin( AirflowPlugin ):
    name      = "remote_file_row_sensor"
    operators = [ Remote_File_Row_Sensor ]