
几周前,我才开始与Luigi合作。 我理解了基础知识,并觉得很想在数据仓库项目中尝试将所有依赖关系图链接起来。
直到我的一位同事问我“我如何使用不同的参数多次执行一项任务? 我想加载去年处理的所有历史记录数据”
- 流媒体使电影配乐比以往更好; Amazon Promo每月25美分,可为您提供无限音乐流
- Spotify Messenger Bot
- 播放列表:告别美妙的梦
- 音频的力量-O Futuro。
- 播放列表策展人寻找的四个要点–史蒂芬·西里诺(Stephen Cirino)
经过一番挣扎,我设法通过两种方式做到这一点。 一种更快,另一种在其他情况下可能更灵活。
包装器任务是什么都不做的任务。 满足您所有要求的过程就完成了。
因此,我在WrapperTask上创建了一个基于类的类:
此类将接收两个参数(启动,停止),以确定所创建任务的范围。 我还将任务名称作为参数传递,并实例化了它以检索需求。
这样,luigi会将’ExampleAllYear’视为一个虚拟任务,查找并逐一运行其依赖项。
尽管非常容易实现,但是每个执行的任务都会检查是否需要运行。 就我而言,支票是postgres表中的计数。 在某些情况下可能是个问题。
RangeDaily是已经实现的包装器。 它具有许多实现的参数和验证。
我只是使用以下命令调用:
我不必执行任何包装任务。 因此,对我来说是更好的解决方案,如果您不必自定义任务的调用方式。
使用RangeDaily还可以使您更改一些任务。 我必须添加一个’bulk_complete’方法重写:
在RangeDaily开始调用任务之前,将调用一次。 您会收到一个带有在命令行中传递的所有日期列表的参数。 并且您必须仅返回不必运行的日期。
就我而言,我使用该列表查找已经插入到数据库表中的不同日期。
由于此方法只执行一次,因此任务启动速度更快。
除了批量完成之外,还要注意其他RangeDaily参数:
luigi.tools.range模块– Luigi 2.7.2文档
警告–如果差距不断累积,其原因(例如缺少依赖项)将不受监控/缓解,那么这将……
luigi.readthedocs.io
我遇到“ days_back”,“ days_forward”,“ task_limit”问题。 它们工作得很好,但是我很难找出这些是我的管道负责人,说没有其他可运行的了。
这是我在这里的第一篇文章。 希望这成为常规。 🙂