SSIS包设计,其中第三方数据正在替换现有数据

时间:2017-04-28 14:21:12

标签: ssis

我过去创建过很多SSIS包,虽然这个包的需要与我写的其他包有点不同。

以下是业务需求的简要说明:

我们的终端上有一个小型数据库,来自第三方供应商,这需要在每晚被覆盖。
此数据的来源是来自第三方供应商的一堆平面文件(CSV)。

当前设置:我们截断了这个数据库的表,然后我们通过SSIS插入文件中的新数据。

问题:有时候文件无法到来,而且我们会截断旧数据,尽管我们没有新数据集。这使我们没有数据库,我们希望在昨天的数据上没有任何数据。

期望的解决方案:在截断当前数据之前,我想要某种机制来查看新数据是否真正存在(这些文件)。

我尝试了什么:我尝试从文件中捕获数据并将它们添加到ADO记录集中,并且仅在此部分成功时才继续。这对我来说似乎没有用,因为我在一个数据流中拥有所有数据捕获活动,而且我没有看到我重用该数据的方法。这样做对我来说似乎是浪费资源,让内存表只是坐在那里。

你在类似的情况下做了什么?

2 个答案:

答案 0 :(得分:1)

  1. 如果文件不存在,请将某些标志(如IsFile1Found)更新为false,并将这些标志传递给存储过程,该存储过程会在条件基础上截断。
  2. 如果文件为空,则通过执行流程任务使用powershell,如果有两行(标题+数据行),则可以提取前两行,则表示数据文件不为空。然后,您可以截断表并导入数据。 其他方法可能是 您可以将数据加载到某个临时表中,并从这些临时表中使用SQL存储过程将数据插入目标表,并在将数据移动到所有目标表后截断这些临时表。这样,在截断目标表之前,您可以检查登台表是否为空。

答案 1 :(得分:0)

我环顾四周,发现有些人正在努力解决同样的问题,尽管他们都没有一个非常优雅的解决方案,我也没有。

我最终做的是为每个感兴趣的文件创建一个平面文件连接,并有一个任务计数记录并保存到变量。如果文件不存在,则程序包将失败,您可以在此时停止执行。有一些这些文件的实际数量对我来说很有意思,但在大多数情况下,我并不在意。如果您不关心计数是多少,您可以继续回收相同的变量;这将减少你的变量的创建(我需要31)。为了保留资源(读取:减少包执行时间),我排除了每个数据源中除一个列之外的所有列;它产生了巨大的变化。