Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File SSIS公共目标、多个文件输入、不同结构_File_Ssis_Format_Packages - Fatal编程技术网

File SSIS公共目标、多个文件输入、不同结构

File SSIS公共目标、多个文件输入、不同结构,file,ssis,format,packages,File,Ssis,Format,Packages,我相信这个问题很常见,但我现在面临着一个真正的挑战,为一个不应该是不可能完成的任务提出一个模块化设计。我有一种情况,我有共同的目标表,大约有五到六个,但是有多个输入文件,需要将它们转换成特定的格式进行插入。我的任务是使设计模块化,以便我们与具有不同格式的新数据提供程序一起工作,处理插入的数据包不会改变,错误报告也不会改变,等等,只是在输入端。我建议使用通用文件格式,这意味着获取源文件,然后转换它们,并在其上运行其余的通用导入过程。有人建议我在输入端考虑这个过程的表。 我想这一过程给我留下深刻印象

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

我想这一过程给我留下深刻印象的是,包可以保存为模板,我可以在与其他数据提供商合作时反复使用公共部分并建立新的连接。除此之外,我还可以看到在脚本任务中使用自定义代码来确保将公共格式插入到公共输入表中,但这就是我所能做到的

如果有人曾经处理过这样的情况,我将非常感谢设计建议,以适应现在和将来的功能

更新:我认为在这个特定实例中强调的分层架构设计就是这样的,这就是为什么我感到困惑的原因:

将有六层。详情如下: A.文件获取 B.文件准备 C.数据转换为XML中的通用文件格式 D.将数据转换为目标格式XML-准备插入数据库 E.插入数据库 F.错误的后处理报告和输出

由于我们将处理多个不同的数据提供者,因此处理数据的步骤是相同的,但是如果有意义的话,提供者之间的各个步骤本身可能不同。示例:我们可能从提供商A获取数据,但我们会从他们那里接收文件,这些文件是压缩的CSV文件。提供者B应该是XML格式的,未压缩的。一个提供商可能会向我们发送文件,我们可能必须去提取文件。这将在上面的文件获取步骤中进行

因此,我的问题是: 答:遵循这里的架构模式还是将可能的东西结合起来更重要?建议将所有连接项合并到一个包中作为顶层,因此一个包可以处理服务调用、SFTP、FTP和其他任何需要的事情。我不确定在需要时间表时,如何为不同的提供商进行多个连接。这似乎使事情变得复杂…我在考虑连接层,但它必须是特定于提供者的,而不是最终的

与文件准备层相同


我认为模块化设计是关键,但将事物堆叠到控制任务中似乎会使设计中的事物比它们应该的更复杂。任何反馈或建议都会对这方面有所帮助。

我会按照另一条评论中的建议,首先将每个文件导入相应的临时表,然后将它们合并。这将为您提供更多的模块化,使添加或删除输入文件变得更容易,并使调试更容易,因为您可以很容易地看到哪个部分失败了。以下是我将要做的工作的概要:

步骤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并将每个临时表连接到union all Data Flow转换转换,或根据需要派生列,然后将输出连接到静态数据库表

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

DROP TABLE tbl_xxxxxx_temp

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

详细信息是:我们有一个通用的目标数据库,该数据库不会更改。然而,输入文件在结构上彼此不同,但包含需要将其放入同一数据库的数据。也就是说,我必须将格式归结为要处理的通用文件格式,或者我必须获取数据并对其进行操作,将其放入表中进行处理,只是为了澄清。任何建议都会有帮助。周二上午刚刚讨论的一些其他细节可能会使情况更加复杂,这让我对正在寻求的多层可重用方法更加困惑。在设计SSIS体系结构时,我的印象是,从一个作业到另一个作业,应该有尽可能多的可重用资源
尽可能多地使用组件,而不是一项工作通过多层包方法完成所有工作,或者我错了吗?上述建议在一种情况下有效,但我们使用多个提供者处理多个文件类型。我相信这会改变一些事情。如果你有多个文件类型和多个源,并且可能有多次,那么就不会有一个可重用的格式。如果所有内容都是文本文件,并且这些文本文件位于一个目录中,则可以相当轻松地将原始数据输入到一列中,并将多个不同的文件保存到一个表结构中。您的表将有两列[FileName]和[RawData],然后在存储过程中执行大量SQL魔术,获取所需的数据并进行转换。实际上,我越想它,您就可以!假设您有一个Excel文件,您可以查询SSI中的每一列,用分隔符组合它们,合并所有Excel文件,对其执行SQL魔术,并与上面的文本文件合并。您可以找到每个文件的文件类型,然后将其转移到文件类型的特定序列容器中,并将原始数据输入到一个表中。您甚至可以为每种文件类型构建一个包,并将该包从其他包中调用,以最大限度地提高可用性。但是我们可能需要更多的细节来给出更好的答案。我更新了细节,以便更详细地描述我之前所问的问题。如有任何建议,将不胜感激。