使用 Kiba 作为文件批处理的最佳实践
Best practice for using Kiba as a batch process on files
我们想 运行 Kiba 作为一系列文件的批处理。提供文件掩码、从 FTP 下载文件,然后 运行 每个文件的 ETL 作业,在每个文件的基础上发送成功或失败通知的最佳结构是什么?
有没有办法从 Kiba 内部执行此操作,或者最好的做法是只在外部处理所有非 ETL 内容,然后在每个文件上调用 kiba?
我最初会从最简单的事情开始,就像你说的那样,使用外部文件然后在每个文件上调用 Kiba。例如。 :
- 构建一个 rake 任务以在本地下载文件(并将它们从 FTP 中删除,或者至少将它们移动到一个单独的文件夹以避免双重处理),在一个众所周知的文件夹中充当收件箱。有关如何执行此操作的有趣链接,请参阅 here。
- 然后构建另一个 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
的转换,或者更高级的解决方案。
我会一如既往地坚持使用最简单的解决方案!
我们想 运行 Kiba 作为一系列文件的批处理。提供文件掩码、从 FTP 下载文件,然后 运行 每个文件的 ETL 作业,在每个文件的基础上发送成功或失败通知的最佳结构是什么?
有没有办法从 Kiba 内部执行此操作,或者最好的做法是只在外部处理所有非 ETL 内容,然后在每个文件上调用 kiba?
我最初会从最简单的事情开始,就像你说的那样,使用外部文件然后在每个文件上调用 Kiba。例如。 :
- 构建一个 rake 任务以在本地下载文件(并将它们从 FTP 中删除,或者至少将它们移动到一个单独的文件夹以避免双重处理),在一个众所周知的文件夹中充当收件箱。有关如何执行此操作的有趣链接,请参阅 here。
- 然后构建另一个 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
的转换,或者更高级的解决方案。
我会一如既往地坚持使用最简单的解决方案!