我是气流新手,我觉得我可能会错过一些惯例或概念。
背景信息:我将文件定期丢弃到S3存储桶中。我的管道需要抓取新文件并进行处理。
基本上:我如何避免重新处理?
管道的某些部分将来不会发生变化,我希望重新处理文件。但在日常工作中,我不想重新处理文件。此外,将来可能会有其他管道需要从头开始并处理所有文件以获得不同的输出。
我有很多保持状态(一个本地json文件,或检查输出文件的存在)的多种方法 - 但我想知道气流中是否存在约定。对我来说最有意义的是重新使用为气流存在的postgres(可能是糟糕的形式?),添加另一个数据库并开始在那里创建表格,如果已经为工作流程X处理了它们,我会列出输入文件,工作流程Y等。
你会怎么做?
答案 0 :(得分:2)
以下是我用4任务DAG
解决类似问题的方法。
编写一个扩展BaseSensorOperator
的自定义S3Sensor。
此传感器使用boto3库,监视存储桶中的特定文件夹。
如果将任何文件放入此存储桶,则会将所有文件路径发布到Xcom。
此传感器是dag中的第一个操作员。
dag中的下一个运算符是一个python运算符,它从先前的任务Xcom中读取列表。 它将所有文件移动到同一存储桶中的另一个文件夹,再次列出Xcom的新路径。
下一个操作员处理这些文件。
下一个操作员再次触发同一个dag(所以我们从自定义s3文件传感器开始,因为这个dag重新触发了自己)。
dag不需要任何schedule_interval
,需要手动触发。然后它会一直看到桶,或直到某些东西断裂。