SSIS Script Component

Why Script Component

Script Component使我们具有在SSIS中使用.net自定义代码的功能,我们可以使用它达到以下的目的,或者说在ETL中有如下需要的时候我们应该考虑使用ScriptComponent:

  1. 如果我们需要对数据做多重转换(比如在两个列上分别加上值然后求平均等),我们可以使用ScriptComponent而不是在数据流中使用多个转换空间
  2. 访问一些已经存在于.net程序及中的业务规则
  3. 使用以下自定义的公式或函数,比如使用银行卡校验算法(Luhn)来验证信用卡号
  4. 校验列数据并且略过不恰当的数据,比如检查年龄列并且略过所有年龄大于100或小于0岁的数据

我们看到Script Component提供了一种方式,使我们以.net编程的方法在数据流中添加自定义的数据处理功能,不过如果我们的目标是在多个Package中重用该自定义功能的话,应该考虑开发自定义的模块而不是使用脚本模块。

使用ScriptComponent

Script Component可以被用作Source、Transformation或Destination,取决于它的用途,它可以支持一个Input以及多个Output。该控件中的自定义Script会被Input或Output中的每一行都触发一次:

  1. 如果被用作Source,它支持多个Output
  2. 如果被用作Transformation,它支持一个输入及多个输出
  3. 如果被用作Destination,它支持一个输入
  4. 不支持错误输出

如果简单来将,Script Component的使用其实只需要简单的两步:在设计器中配置元数据及在VSTA中编辑脚本。

配置元数据

相比于其他模块,Script Component只有简单的4个界面:

Script界面

脚本界面中最主要的其实就是变量的配置,我们可以选择一些只读以及一些可读可写的变量传给脚本,然后脚本中可以使用这些变量来作为输入或输入值:

Input界面

该界面只有Script Component被用作Transformation或Destination的时候有。它跟其他模块的Input没什么区别,都是选择一些从某个输入过来的列而已:

Input及Output界面

该界面最主要的是可以添加自定义的Output及Output列,并指定列的数据类型:

Connection Manager界面

这里可以添加脚本中会使用的连接管理器,不过在实际项目中我从来没用过该界面。

脚本编辑

脚本编辑界面通过在Script界面点击编辑脚本进入,在讨论如何自定义我们的代码之前我们先看一下自定义代码的骨架。如下所示,其实主要有三个文件两个类:

其中ComponentWrapper文件表示一个自定义的Script Component模块类 -UserComponent,它继承自ScriptComponent基类。下面是该类的一个简单视图,它主要包含了两类东西:一是ConnectionsVariables变量,我们可以用它们来获取ScriptComponent模块元数据设计器中指定的ETL变量和连接管理器;另一类是一些可重写的函数(截图中未列出)以允许我们可以重写来处理输入和输出。

BufferWrapper文件表示控件的缓冲部分,我们知道对任何的数据流任务都是需要用到缓冲的:

最后main文件中包含的类才是真正的ScriptComponent入口类,它名为ScriptMain并继承自UserComponent,表示我们创建的该ScriptComponent控件:

用作Source

当Script Component用作Source的时候,因为只有输出没有输入,所以main文件中的ScriptMain类会包含一个名为CreateNewOutputRows()的函数,我们所有需要处理及输出的内容都在直接或间接放在这个函数中,如果刨除其他自定义的逻辑,该函数的功能其实只有两个:

  1. 在输出缓冲中新加一行数据,这通过调用MyOutputName.AddRow()函数来实现,其中MyOutputName就是我们在元数据设计器中建的输出流的名字
  2. 为新加的这行数据的各个列赋值,者通过MyOutputName.ColumnName= val来实现

用作Transformation

当用作转换的时候,我看MSDN上说可以有多个输出,但是在实际的代码中发现并不能实现这一点,不知道是不是我弄错了。现在看到的情形是,对于用作转换和目的地的情况,ScriptMain函数有一个InputName_ProcessInputRow()函数,该函数的如参是输入缓冲中的数据行,但是你同样能找到你在自定义输出中的列并为其赋值。比如下面的例子中,Name列是输入列,outputName列是输出列,它们都可以在Input0Buffer中找到。所以对于这种情况下的脚本控件,其主要的两步功能是用同一种方式实现的:

  1. 获取输入的值,通过Row.ColName获取
  2. 为输出列赋值,通过Row.outputCol赋值

时间: 2024-10-18 14:49:04

SSIS Script Component的相关文章

微软BI 之SSIS 系列 - 使用 Script Component Destination 和 ADO.NET 解析不规则文件并插入数据

开篇介绍 这一篇文章是 微软BI 之SSIS 系列 - 带有 Header 和 Trailer 的不规则的平面文件输出处理技巧 的续篇,在上篇文章中介绍到了对于这种不规则文件输出的处理方式.比如下图中的这种不规则文件,第一行,第二行 Header 部分,第三行的内容 Content 部分,最后一行的 Trailer 部分. 在前几个课程 微软BI SSIS 2012 ETL 控件与案例精讲 第43,44,45,46 课中,我分别讲解了如何使用 .Script Component Source 解

Script component 简单应用

在SSIS中,可以使用C#编写脚本,这是十分激动人心的事,能够使用C#代码,使得Script Component无所不能. 第一部分:组件简介Script Component 有三种类型:Source, Destination and Transformation 1,每种类型的脚本,都有两种类型的参数:ReadOnly 和ReadWrite,在脚本中可以使用 this.Variables.VariableName 来获取或设置参数变量的值 示例:创建四个Variable,并传递给Script

使用Script Component源处理不规则平面文件

微软 BI 系列随笔 - SSIS 2012 高级应用 - Script Component处理不规则平面文件 场景介绍 在使用SSIS从平面文件导入源数据时,最常遇到的是以下两种情况: 导入规则的平面文件,这种文件的每一行数据的解析规则都是一样的 导入不规则的平面文件,这种文件可能包含多种数据结构,比如某些行是头(Head),某些行是内容(Content),某些行是尾(Tail),三种数据的解析格式都不一样 源文件的字符编码集不一样,例如文件是来自于不同的系统(或区域),这些文件的编码有可能是

Script component 用法

在SSIS中,可以使用C#编写脚本,这是十分激动人心的事,能够使用C#代码,使得Script Component无所不能. 第一部分:组件简介Script Component 有三种类型:Source, Destination and Transformation 1,每种类型的脚本,都有两种类型的参数:ReadOnly 和ReadWrite,在脚本中可以使用 this.Variables.VariableName 来获取或设置参数变量的值 示例:创建四个Variable,并传递给Script

Script Component 引用package variable

ScriptComponet 的变量分为两种类型,ReadOnly和ReadWrite,使用C#引用这两种类型的变量,有一点不同. 1,创建两个变量 2,将变量传递给script component 3,在script component中引用变量有两种方式 3.1 使用变量名作为来引用变量 int code = this.Variables.VarCode; //string name = this.Variables.VarName; //this.Variables.VarName = "

using SSIS script task to send email result

sometimes notification email is required to be sent so that receivers can know about the data load status. Following C# code in SSIS script task is composed to meet the requirement. 1. drag a SQL task to get data result and assigned full set to an ob

转 Refresh Excel Pivot Tables Automatically Using SSIS Script Task

Refresh Excel Pivot Tables Automatically Using SSIS Script Task https://www.mssqltips.com/sqlservertip/5946/refresh-excel-pivot-tables-automatically-using-ssis-script-task/ 原文地址:https://www.cnblogs.com/Tonyyang/p/10468749.html

SSIS ->> Script Task

利用Script Task,我们可以做一些本身SSIS没能满足我们的,或者实现起来效果不够理想的.比如说我们想做一件这样的事情,去检查某个文件是否为空.如果我们通过Row Count组件来实现,性能上不理想,因为我又并不需要要知道究竟文件包含多少行数据.我们只需要简单地知道文件是否包含数据.我们可以通过写C#代码,去调用BinaryStream的方法来读取该文件的前几行就可以确定是否文件包含数据.总的来说,Script Task能做事情分几类:1) 读取和改变包的变量:2)读取包的属性:3)用C

SSIS入门与进阶

SSIS是从MS SQL 2005开始引入的,实际上是DTS的马甲,是SQL Server Integration Service的缩写.DTS也好,SSIS也罢,都是ETL(Extract Transform Load)工具,一般用来导入数据到数据库.SSIS比普通的ETL更进一步,它是可视化的,用Visual Studio来开发,包文件(*.dtsx)采用的是XML格式.跟Office2007+系列文档扩展名一样,都是???x,代表xml格式,但他没有压缩成zip文件罢了. 首先使用SSIS