0

我工作的公司有很多系统,其中源数据来源于平面文件或 Excel 工作簿。然后使用 DTS 将这些文件导入 SQL Server 数据库。

这些文件通常包含各种控制字符(例如,我刚刚花了一个小时发现某些记录中有一个\0显然 SAP 喜欢用它来填充内容的记录),理想情况下,我们希望在它们进入我们的数据库之前将其删除。

我没有大量使用 DTS/SSIS,但我认为它们中一定已经有一些东西,或者至少是我应该使用的消毒最佳实践?

任何关于如何在许多进口产品中以可重复的方式做到这一点的想法都将不胜感激。

4

3 回答 3

1

我只能从我在 SSIS 的经历中说出来,所以如果这只是有点用处,我深表歉意。

在一般卫生方面,我还没有遇到任何类型的为这项工作专门构建的组件。我认为这是因为不同的场景对“坏数据”的定义可能有很大不同,但可以说,像去除不可打印字符这样的事情可能是常见的业务需求,所以这有点令人惊讶。

自然,您总是可以使用派生列转换,或者在更复杂的情况下,使用脚本组件,但是这些很难使跨包的逻辑复制变得轻松。在某些情况下,我们使用CozyRoc组件来创建我们可以在包之间共享的脚本,但是除了必须首先实际访问这些组件之外,每次您需要时仍然需要进行一定程度的设置功能。

因此,在这种情况下,我个人认为最好的选择是将您的常见卫生程序整合到自定义数据流组件中。我们为自己开发了一个来处理一些非常常见的数据验证逻辑,并设置组件编辑器,以便您可以选择复选框以启用您想要应用于给定列的任何检查。然后它就变成了拖放和连接数据流的问题。至少对我们来说,花时间开发组件绝对值得。

我不知道 DTS 在这方面提供了什么(我认为它相当有限,或者至少不友好,但我可能是错的),所以这可能对您的旧包没有用处。我觉得 Cade 的解决方案在这种情况下可能是最轻松的,假设它对您的输入数据是可行的。

就 SSIS 的一般见解而言,我发现 Jamie Thomson 的博客(以前在这里)非常有帮助,因此您可能想查看他之前是否讨论过这个特定主题。

无论如何,希望这至少有一点帮助,并祝你好运找到解决方案。

附带说明:感谢您希望在将数据粘贴到数据库之前对其进行清理。我们从从不清理数据的特定供应商处获取数据,然后尝试将其放入 XML 中,以通过 Web 服务将其发送给我们。不用说,XML 解析器不太喜欢不可打印的字符。

于 2010-06-28T16:30:47.447 回答
0

根据您的需要,您还可以执行以下操作:

  1. 将数据(通过 SSIS / DTS)导入数据库中的“暂存”表
  2. 在您的数据库中有一个“清理”表,其中包含(每行)您希望删除(或替换为其他内容)的任何字符串。当然,这个表可以有不同场景的附加列
  3. 使用游标逐步浏览表格并进行清理。
于 2010-07-14T13:17:56.550 回答
0

如果某些字符总是可以简单地替换/删除,那么我们通常使用自定义 C 程序处理此预导入。这显然不适用于二进制文件或具有可变长度列长度指示列或 EBCDIC 等的任何内容,但是当它可以使用时,无论导入工具如何,它都可以应用。

于 2010-06-28T13:18:14.270 回答