SSIS通用目的地,多个文件输入,不同结构

时间:2013-12-30 16:19:37

标签: file ssis format packages

我确信这个问题很常见,但是我正面临着一个非常具有挑战性的时期,他提出了一个模块化的设计,不应该成为一项不可能完成的任务。我有一种情况,我有共同的目标表,大约五六个,但多个输入文件需要按摩到某种格式插入。我的任务是使设计模块化,以便我们使用不同格式的新数据提供者,处理插入的包的各个部分不会改变,错误报告等,只是输入端。我建议使用一种通用文件格式,这意味着获取源文件,然后转换它们并在它们上运行其余的常见导入过程。有人建议我考虑在输入端使用表格进行此过程。

我想这个过程让我感到震惊的是,这个包可以保存为模板,我可以反复使用常用的部分,并在我们与其他数据提供者合作时建立新的连接。除此之外,我可以看到在脚本任务中使用自定义代码以确保将常见格式插入到公共输入表中,但这就是我所获得的。

如果有人曾经处理过这种情况,我会很感激设计建议,以适应现在和将来的功能。

更新:我认为在这个特定实例中强调的分层架构设计就是这样(这就是为什么我觉得它令人困惑):

  1. 会有六层。它们如下:
  2. 一个。文件获取 B.文件准备 C.数据转换为通用文件格式(XML格式) D.将数据转换为目标格式(XML - 插入数据库的准备) E.插入数据库 F.后期处理(报告和输出错误

    由于我们将处理几个不同的数据提供者,因此处理数据的步骤相同,但如果有意义,各个步骤本身可能在提供者之间有所不同。示例:我们可能会从提供商A获取数据,但我们会从他们那里收到文件,并且这些文件是压缩的CSV文件。提供者B将使用XML,未压缩。一个提供商可能会向我们发送文件,我们可能需要选择文件(这将在上面的文件获取步骤中进行)。

    1. 所以我的问题是:
    2. 一个。在这里遵循建筑模式或将事物结合起来是否更为重要?可能的建议是将单个包中的所有连接项组合为顶层,因此单个包可以处理诸如进行服务调用,SFTP,FTP以及所需的任何其他操作。我不确定在需要时间表时如何为不同的提供商进行多个连接。它似乎使事情变得复杂......我正在考虑连接层,但它是特定于提供者,而不是所有的全部。

      B.与文件准备层相同的东西。

      我认为模块化设计是关键,但将事物堆积到控制任务中似乎会使设计中的事情变得更加复杂。任何反馈或建议都会对此有所帮助。

1 个答案:

答案 0 :(得分:0)

我会做另外评论中建议的内容,然后先将每个文件导入相应的临时表,然后再将它们联合起来。这将为您提供更多模块化,并使添加或删除输入文件更容易,并使调试更容易,因为您可以轻松地查看哪个部分失败。以下是我要做的概述:

第1步SQL任务: 创建临时表(根据需要使用唯一表重复每个任务):

IF  EXISTS (SELECT * FROM sys.objects 
WHERE object_id = OBJECT_ID(N'[dbo].[tbl_xxxxxx_temp]') 
AND type in (N'U'))
DROP TABLE [dbo].[tbl_xxxxxx_temp]
GO   

CREATE TABLE [dbo].[tbl_xxxxxx_temp](
(columns go here)
) ON [PRIMARY]
GO

第2步:数据流任务 创建数据流任务并将每个文件导入到您在上面创建的唯一临时表中。

第3步:数据流任务 创建第二个DFT并将每个临时表连接到联合所有数据流转换(根据需要转换或派生列),然后将输出连接到静态数据库表。

步骤4:SQL任务:删除临时表

DROP TABLE tbl_xxxxxx_temp

请注意,必须在每个数据流任务中将“DelayValidation”设置为True才能使其正常工作。