很长一段时间后做SSIS。
我有几个包,每个包都是特定于一个表,它们都(大多数)都在做标准的ETL - 从一个源提取,转换并加载到不同的源。
如何将其转换为一个包并提供表名(源和目标)作为输入参数?
答案 0 :(得分:1)
你不能直接。数据流的工作方式是通过紧密绑定到源数据的模式。列名和数据类型不能更改。通过预先知道单行可以是最宽的,SSIS执行引擎然后可以为行宽* BufferRowSize预分配内存并且知道所有数据将适合该地址空间并且他们可以对所有数据进行内存中修改。
磁盘上的实际软件包必须绑定到源数据形状。但是,这并不意味着您需要物理构建所有这些包。我没有,我做了一点SSIS。
如果您有.NET思维,那么您可以使用基本API,也可以尝试使用EzAPI,但这比我通常想做的更多。
相反,我使用Biml。考虑使用平面文件源截断和重新加载模式。它是什么样子的?至少是一个执行SQL任务,一个数据流和两个连接管理器(源和目标)。很好,所以建立一次并称之为V1。然后,当您使用不同的源文件和/或目标时,您会找出哪些更改,这是V2的基础。这仍然是一种手动方法,但现在您知道何时需要新的源和目标,我对此文件进行了N次更改,然后单击按钮,然后输出一个包。
一旦您了解需要更改以满足您的设计模式的内容,然后就可以自动化snot。 Biml非常棒,因为它允许您使用脚本,就像我们对经典ASP所做的那样。使用免费版BIDS Helper是一种笨重的脚本体验,但付费工具Mist拥有非常流畅的体验。例如,查看我的Replicate-O-Matic帖子。我的目标biml文件采用模式和表参数,这足以让我生成一个包,将所有数据从源连接复制到目标。这是一个简单的例子。 mmarie有一个很好的模式,她的目标有十几个参数,涵盖了事实负载所需的一切。她将所需的所有元数据收集到表中,并生成所有SSIS以解决她的数据仓库负载。考虑一下,您将了解SSIS所需的专业知识转移到收集有关问题的正确元数据。您发现Truncate和Reload不合适,但您需要增量加载模式,没问题。你调用一个不同的Biml文件,最好使用相同的参数,然后出现一个解决相同业务问题但以不同方式解决的软件包。