2

我有一个日常流程,它依赖于交付到文件系统上的“投递箱”目录的平面文件,这会将这个逗号分隔的(来自外部公司的 excel 等)数据加载到数据库中,一个零碎的 Perl/Bash 应用程序, 这个数据库被多个应用程序使用,也可以用一些 GUI 工具直接编辑。然后使用一些额外的 Perl 应用程序将一些数据复制到我主要使用的数据库中。

不用说,所有这些都是复杂且容易出错的,输入的数据有时会损坏,有时编辑会破坏它。我的用户经常抱怨丢失或不正确的数据。区分平面文件和数据库以分析流程中断的位置非常耗时,而且每天的数据变得越来越多,难以分析。

我计划修复或重写部分或全部数据传输过程。

在开始之前,我正在查看推荐阅读,有关如何编写健壮、抗故障和可自动恢复的 ETL 流程的网站和文章或其他建议将不胜感激。

4

3 回答 3

1

你没有说你有什么数据库后端,但在 SQL Server 中我会把它写成一个 SSIS 包。我们有一个系统,旨在将数据写入元数据数据库,告诉我们何时提取文件、是否成功处理以及为什么没有处理。它还告诉文件有多少行(然后我们可以用它来确定当前行大小是否异常)。SSIS 的优点之一是我可以在包连接和变量上设置配置,以便将包从开发转移到产品很容易(一旦我有了配置,我就不必每次都手动更改连接在配置表中设置)

在 SSIS 中,我们会进行各种检查以确保数据正确或在插入数据库之前清理数据。实际上我们做了很多很多的检查。可以从文件处理中删除有问题的记录,并将其放在单独的位置供 dbas 检查并可能传回给客户。我们还可以检查各个列中的数据(以及列名,如果给出,并非所有文件都有)是否符合预期。因此,如果邮政编码字段突然有 250 个字符,我们就知道有问题,可以在处理之前拒绝该文件。这样,当客户端在不告诉我们的情况下将 lastname 列与 firstname 列交换时,我们可以在导入 100,000 条新的错误记录之前拒绝该文件。在 SSIS 中,我们还可以使用模糊逻辑来查找要匹配的现有记录。因此,如果约翰史密斯的记录显示他的地址在 213 State st。它可以匹配我们的记录,即他住在 215 State Street。

以这种方式设置流程需要很多时间,但一旦你这样做了,你正在处理好的数据的额外信心就值得它的黄金重量。

即使您不能使用 SSIS,这至少应该让您了解应该执行哪些操作来将信息输入数据库。

于 2009-09-22T14:39:33.803 回答
1

这正是消息队列管理器的设计目的。这里有一些例子。

于 2009-09-21T22:02:42.397 回答
0

我发现这篇文章对运行 cron 作业的错误处理方面很有帮助:

于 2011-09-10T10:11:09.807 回答