1

假设一个平面文件 F1.txt、列 MyCol1 和一个包 Pkg1 将所述文件加载到 SQL 服务器。

没问题,对吧?对。

现在假设一个平面文件 F2.txt、列 MyCol1、MyCol2 和相同的包 Pkg1 将所述文件加载到 SQL 服务器。

我们将对 Pkg1 和 presto 进行一些调整 - 它加载 F2.txt 就像做梦一样。

现在我们喂它 F1.txt,这就是事情恶化的地方。

顺便说一句,这并不局限于平面文件,而是具有更一般的性质。

欢迎任何和所有关于如何在同一个包中运行遗留数据的建议。

TIA

彼得

4

1 回答 1

1

看起来你在这里有两个问题。首先是了解如何使用连接管理器。对于平面文件输入,通常通过为每个文件布局创建一个连接管理器来为您提供更好的服务。文件 1 看起来像 (Column1) 而文件 2 看起来像 (Column1, Column2)?这意味着需要定义 2 个不同的平面文件连接管理器。

如果您有 2 个版本的文件 2,其中一个 Column1 包含数字,另一个 Column1 包含字符数据,则需要 2 个唯一的连接管理器(总共 3 个)。

与上述相关的好消息是文件名更改是微不足道的,并且不需要创建唯一的连接管理器。F1.txt、F1_20120501.txt、F1.good.txt 等都将由您为该布局定义的连接管理器提供服务。您只需在给定连接管理器的 ConnectionString 属性上使用表达式,即可在运行时更新当前包。

因此,现在您拥有所有这些平面文件连接管理器,您需要使用它们。这种神奇发生在数据流任务中。数据流对其中使用的元数据非常挑剔。当您设计数据流时,您正在与 SSIS 签订合同,如果您试图通过将字符字段设置为日期字段或不提供所有列来违反它,则包将无法通过验证检查,因为您没有持有讨价还价。对此的解决方案是,您将再次需要围绕您的包所需的各种连接管理器定义多个数据流。

定义完所有这些后,您只需要一个协调器来查看源文件以确定应该执行哪个数据流。我提供了一个关于这个问题的示例Create SSIS package to import from one of many data sources

还有一个类似的问题,我提出了一个可能对不一致的列计数导入的 SSIS 任务感兴趣的解决方案?这实际上取决于您的处理规则。

如果您尝试在 SSIS 包中整合/重用业务逻辑,那么我会寻找一种使用各种数据流将离散源暂存为单一数据存储的方法(原始文件、具有大量空列的暂存表等) )。

于 2012-05-22T05:12:33.117 回答