2

我们希望将 Kiba 作为一系列文件的批处理运行。提供文件掩码、从 FTP 下载文件、然后在每个文件上运行 ETL 作业、基于每个文件发送成功或失败通知的最佳结构是什么?

有没有办法在 Kiba 中做到这一点,或者最好的做法是在外部处理所有非 ETL 的东西,然后在每个文件上调用 kiba?

4

1 回答 1

1

我最初会从最简单的事情开始,就像你说的那样,使用外部文件然后在每个文件上调用 Kiba。例如:

  • 构建一个 rake 任务以在本地下载文件(并将它们从 FTP 中删除,或者至少将它们移动到一个单独的文件夹以避免双重处理),在一个众所周知的文件夹中,它将作为一个收件箱。有关如何执行此操作的有趣链接,请参见此处。
  • 然后构建另一个 rake 任务以遍历收件箱文件夹并处理给定文件(使用Dir[pattern].each)。

确保使用帮助程序,例如:

def system!(command)
  fail "Command #{command} failed" unless system(command)
end

确保在进行系统调用时检测到执行失败。

对于您的 ETL 文件本身,您将使用一个at_exit块来捕获失败并相应地通知(参见此处的示例Bugsnag,并post_process在这种情况下使用一个块来捕获成功并通知。

这肯定会工作并且很简单,也就是说还有其他可能性,例如单个 ETL 文件将下载一个pre_process块中的文件,然后有一个源将为每个下载的文件生成一个文件名,也许还有一个可以自己调用的转换kiba在命令行上,甚至更高级的解决方案。

我会一如既往地坚持最简单的解决方案来开始!

于 2016-09-12T17:09:42.550 回答