我们将有大约200个文件(csv,excel,PDF,屏幕抓取)都需要进入SQL数据库。因此,大多数数据源都有一个独特的过程
到目前为止,我们只有两个想法:
编写代码以编程方式根据需要加载每个数据源并编写代码以根据需要插入(这是简单的方法,但可能最耗时)
为每个文件写一个XML映射,将列从源映射到目标SQL DB的列/表。但是编写代码来解释这个自定义XML映射文件会变得复杂吗?
我们应该考虑的其他任何工具或方法?我可能SSIS可能会以某种方式提供帮助吗?这似乎是BizTalk项目的类型吗?但那太贵了..
答案 0 :(得分:2)
正如Pondlife所提到的,在现实世界的解决方案中,程序化解决方案通常变得越来越难以维护和支持,因为要求的全部复杂性被发现。这在前面通常并不明显。
我会选择一个好的ETL工具 - SSIS通常是目前平衡典型标准的最佳选择。然后,您需要预算一定的人工日数来完成每项输入。对于一个非常简单的输入,你可以达到的最快速度是每个文件0.5个工作日(包括设计,构建和单元测试)。
您可以通过复制第一个包作为其他包的起点来节省一些时间。
对于像这样的“原始”输入,我通常只是将未更改的数据加载到Staging表中来启动每个包。此时我将每列加载为unicode文本。然后,后续的数据流或包可以提取并提供该数据。这种方法确实加快了调试,测试和审计的速度 - 一旦您信任文件加载,就可以使用SQL查询Staging表。
BTW SSIS包实际上是一个描述输入,转换和输出要求的XML文档 - 类似于你的第2点。
答案 1 :(得分:1)
普遍没有正确的方法。只关注您的具体情况更容易。我会选择阻力最小的路径。这意味着如果某些文件更容易用xml映射(可能是csv,excel等),我会使用xml映射。对于xml映射不起作用的其他人,我会选择别的东西。
现实情况是,某些方法可以更好地处理一种类型的数据源,而其他方法可以更好地与其他类型相比。
答案 2 :(得分:1)
的Perl。只需破解每种文件类型,即可生成适合bcp加载到数据库中的分隔文件。通常情况下,你可以使用Perl中的正则表达式来获取XML文件中的内容,但是如果你知道XML并且输入确实很好,Perl有很多解析器可以将正确的XML转换成适当的数据。 ;-)
Windows上的Perl也将通过Ole自动化Excel。在那里,完成了,工作和可以预期的一样。将文件另存为文本。也许迭代它来修复它。根据需要重复。
我不同意这种事情不像其他人建议的那样适合编程。它不是完美的,但可以渐进地减少错误,而手动过程则不然。
将脚本,输入和输出保存在不同的目录中。这样,您可以使用Perl(或其他)来计算文件并验证转换。如果你对你的名字和扩展名一样小心,那么很容易看出还有什么需要做。让你的脚本成为一切,坚持下去,包括加载数据库,这样你就可以在你想要的时候重新运行它。在您注意到数据库中的数据出现问题之后非常令人满意,只能通过调整解析器来解决。
快乐的黑客攻击。