如何在 SSIS 中进行元编程
How to do metaprogramming in SSIS
好久没搞SSIS了
我有几个包,每个包都特定于一个 table,它们都(大多数)都在进行标准 ETL - 从一个源中提取,转换并加载到不同的源中。
如何将其转换为一个包并提供 table 名称(源和目标)作为输入参数?
你不能直接。数据流的工作方式是紧密绑定到来自源的数据模式。列名和数据类型不能更改。通过提前知道单行的最宽,SSIS 执行引擎可以为 rowwidth * BufferRowSize 预分配内存,并知道所有数据都将适合该地址 space,并且它们可以进行内存中修改以所有这些数据。
磁盘上的实际包必须绑定到源数据形状。但是,这并不意味着您需要实际构建所有这些包。我不会,我会一点点 SSIS。
如果您有 .NET 头脑,您可以使用基础 API 或者您可以尝试 EzAPI 但这比我通常想做的要多。
相反,我使用 Biml。考虑使用平面文件源的截断和重新加载模式。它是什么样子的?至少,一个执行 SQL 任务、一个数据流和两个连接管理器(源和目标)。太好了,所以构建一次并将其命名为 V1。然后你会发现当你使用不同的源文件 and/or 目标时会发生什么变化,这就是 V2 的基础。这仍然是一种手动方法,但现在你知道当我需要一个新的源和目标时,我对该文件进行 N 次更改并单击按钮,然后出现一个包。
一旦您了解需要更改哪些内容以满足您的设计模式,然后 将其自动化。 Biml 很棒,因为它允许您使用脚本,就像我们对经典 ASP 所做的那样。免费版 BIDS Helper 的脚本编写体验很笨拙,但付费工具 Mist 的体验非常流畅。例如,看看我的 Replicate-O-Matic post. My target biml file takes a schema and table parameter and that's enough for me to generate a package that copies all the data from my source connection to the destination. That's a simple example. mmarie 有一个很好的模式,其中她的目标有十几个参数,涵盖了她加载事实所需的一切。她将她需要的所有元数据收集到 table 中,并生成所有 SSIS 来解决她的数据仓库负载。想一想,您将所需的专业知识从了解 SSIS 转移到收集有关问题的正确元数据。您发现截断和重新加载不合适,但您需要增量加载模式,没问题。您调用一个不同的 Biml 文件,最好使用相同的参数,然后生成一个以不同方式解决相同业务问题的包。
好久没搞SSIS了
我有几个包,每个包都特定于一个 table,它们都(大多数)都在进行标准 ETL - 从一个源中提取,转换并加载到不同的源中。
如何将其转换为一个包并提供 table 名称(源和目标)作为输入参数?
你不能直接。数据流的工作方式是紧密绑定到来自源的数据模式。列名和数据类型不能更改。通过提前知道单行的最宽,SSIS 执行引擎可以为 rowwidth * BufferRowSize 预分配内存,并知道所有数据都将适合该地址 space,并且它们可以进行内存中修改以所有这些数据。
磁盘上的实际包必须绑定到源数据形状。但是,这并不意味着您需要实际构建所有这些包。我不会,我会一点点 SSIS。
如果您有 .NET 头脑,您可以使用基础 API 或者您可以尝试 EzAPI 但这比我通常想做的要多。
相反,我使用 Biml。考虑使用平面文件源的截断和重新加载模式。它是什么样子的?至少,一个执行 SQL 任务、一个数据流和两个连接管理器(源和目标)。太好了,所以构建一次并将其命名为 V1。然后你会发现当你使用不同的源文件 and/or 目标时会发生什么变化,这就是 V2 的基础。这仍然是一种手动方法,但现在你知道当我需要一个新的源和目标时,我对该文件进行 N 次更改并单击按钮,然后出现一个包。
一旦您了解需要更改哪些内容以满足您的设计模式,然后 将其自动化。 Biml 很棒,因为它允许您使用脚本,就像我们对经典 ASP 所做的那样。免费版 BIDS Helper 的脚本编写体验很笨拙,但付费工具 Mist 的体验非常流畅。例如,看看我的 Replicate-O-Matic post. My target biml file takes a schema and table parameter and that's enough for me to generate a package that copies all the data from my source connection to the destination. That's a simple example. mmarie 有一个很好的模式,其中她的目标有十几个参数,涵盖了她加载事实所需的一切。她将她需要的所有元数据收集到 table 中,并生成所有 SSIS 来解决她的数据仓库负载。想一想,您将所需的专业知识从了解 SSIS 转移到收集有关问题的正确元数据。您发现截断和重新加载不合适,但您需要增量加载模式,没问题。您调用一个不同的 Biml 文件,最好使用相同的参数,然后生成一个以不同方式解决相同业务问题的包。