1

我们将有大约 200 个文件(csv、excel、PDF、屏幕抓取)都需要进入 SQL 数据库。所以大多数数据源都会有一个独特的程序

到目前为止,我们只有两个想法:

  1. 编写代码以根据需要以编程方式加载每个数据源,并编写代码以根据需要插入(这是一种简单的方法,但可能最耗时)

  2. 为每个文件编写一个 XML 映射,将列从源映射到目标 SQL DB 的列/表。但是编写代码来解释这个自定义 XML 映射文件会变得复杂吗?

我们应该考虑其他任何工具或方法吗?我虽然也许 SSIS 可以以某种方式提供帮助?这似乎是 BizTalk 的项目类型,对吗?不过太贵了。。

4

3 回答 3

2

正如 Pondlife 所提到的,在现实世界的解决方案中,随着需求的全部复杂性被揭示,程序化解决方案通常变得越来越难以维护和支持。这通常在前面并不明显。

我会选择一个好的 ETL 工具 - SSIS 通常是目前平衡典型标准的最佳选择。然后,您需要预算一定数量的人工日来处理每个输入。对于一个非常简单的输入,您最快可能会达到每个文件 0.5 个工作日(包括设计、构建和单元测试)。

您可以通过复制您的第一个包作为其他包的起点来节省一些时间。

对于像这样的“原始”输入,我通常只需将未更改的数据加载到暂存表中即可启动每个包。此时我将每一列加载为 unicode 文本。然后后续的数据流或数据包可以提取该数据并交付它。这种方法确实加快了调试、测试和审计的速度——一旦您信任您的文件加载,您就可以使用 SQL 查询暂存表。

顺便说一句,SSIS 包实际上是一个描述输入、转换和输出要求的 XML 文档 - 类似于您的第 2 点。

于 2013-03-13T00:32:49.907 回答
1

没有普遍的正确方法。仅对您的特定情况更容易才重要。我会选择阻力最小的路径。这意味着如果某些文件更容易用 xml 映射(可能是 csv、excel 等),我会为这些文件使用 xml 映射。对于 xml 映射不起作用的其他人,我会选择其他东西。

现实情况是,某些方法在一种类型的数据源上效果更好,而另一些方法在另一种类型上效果更好。

于 2013-03-13T08:26:26.163 回答
1

珀尔。只需破解每种文件类型以生成适合 bcp 加载到数据库中的分隔文件。通常你可以在 Perl 中使用正则表达式来抓取 XML 文件中的内容,但是如果你知道 XML 并且输入的格式确实很好,那么 Perl 有很多解析器可以将正确的 XML 转换为正确的数据。;-)

Windows 上的 Perl 也将通过 Ole 自动化 Excel。去过那里,做到了,工作与预期一样好。将文件另存为文本。也许迭代它来修复它。根据需要重复。

正如其他人所建议的那样,我不同意这种事情不适合编程。它不是完美的,但可以渐近地减少错误,而手动过程并非如此。

将您的脚本、输入和输出都保存在不同的目录中。这样,您可以使用 Perl(或其他)来计算文件并验证转换。如果你对你的名字和扩展名很小心,很容易看出还有什么要做。让您的脚本适用于所有内容,包括加载数据库,以便您可以在任何时候以幂等方式重新运行它。在您注意到数据库中的数据存在只能通过调整解析器来解决的问题之后,非常令人满意。

快乐的黑客。

于 2013-03-14T04:10:08.240 回答