我有一个日常流程依赖于传送到文件系统上“drop box”目录的平面文件,这会将这个以逗号分隔(从外部公司的excel等)数据加载到数据库中,这是一个零碎的Perl / Bash应用程序,该数据库由多个应用程序使用,也可以直接使用某些GUI工具进行编辑。然后,一些数据会被一些额外的Perl应用程序复制到我主要使用的数据库中。
毋庸置疑,所有复杂且容易出错的数据,有时会出现数据损坏或有时编辑会破坏它。我的用户经常抱怨数据丢失或不正确。区分平面文件和数据库以分析流程中断的位置非常耗时,而且每天过去的数据都会变得更加缺乏数据并且难以分析。
我计划修复或重写部分或全部数据传输过程。
在我开始阅读之前,我正在寻求推荐阅读,有关如何编写健壮,抗故障和可自动恢复的ETL流程或其他建议的网站和文章将不胜感激。
答案 0 :(得分:1)
这正是Message Queue Managers的设计目标。一些例子是here。
答案 1 :(得分:1)
你没有说你有什么数据库后端,但在SQL Server中我会把它写成SSIS包。我们有一个系统,旨在将数据写入元数据数据库,告诉我们何时拾取文件,是否成功处理,以及为什么不成功处理。它还会告诉文件有多少行(我们可以使用它来确定当前行大小是否异常)。 SSIS的优点之一是我可以在包连接和变量上设置配置,从而将包从开发转移到prod很容易(每次配置完成后,我都不必进入并手动更改连接在配置表中设置)
在SSIS中,我们会在插入数据库之前进行各种检查以确保数据正确或清理数据。实际上我们做了很多很多检查。可疑记录可以从文件处理中删除,并放在一个单独的位置,以便dbas检查并可能传回给客户。我们还可以检查各列中的数据(以及列名如果给出,而不是所有文件都有),这是预期的。因此,如果zipcode字段突然有250个字符,我们就知道出了问题,可以在处理之前拒绝该文件。这样,当客户端使用firstname列交换lastname列而不告诉我们时,我们可以在导入100,000个新的错误记录之前拒绝该文件。在SSIS中,我们还可以使用模糊逻辑来查找要匹配的现有记录。因此,如果John Smith的记录显示他的地址是213 State st。它可以匹配他说他居住在215 State Street的记录。
以这种方式设置流程需要很多,但是一旦你这样做,你处理好数据的额外信心就值得用黄金来衡量。
即使您不能使用SSIS,这至少应该为您提供一些关于将信息输入数据库所应做的事情的想法。
答案 2 :(得分:0)
我发现这篇文章对于运行cron作业的错误处理方面很有帮助: