在SSIS工程的开发过程中,OLEDB 数据源和目标组件是最常用的数据流组件。从功能上讲,OLEDB 数据源组件用于从OLEDB 提供者(Provider)中获取数据,传递给下游组件,OLEDB提供者是外部数据源,SQL Server是其中一种OLEDB提供者;OLEDB目标组件用于把数据流插入到关系型数据表中。OLEDB数据源和目标组件非常灵活,支持动态传参,功能强大,本文总结了这两个组件经常被用到的属性和用法。

一,数据源组件

查看数据源组件的编辑器,对数据源组件的配置,主要分为三大部分:连接管理器(Connection Manager),数据列(Columns)和错误输出(Error Output)。

1,配置连接管理器

数据源组件的数据来源于外部数据源,SSIS从外部数据源中获取数据,并把数据以数据流(Data Stream)的格式加载到SSIS引擎中。在连接到外部数据源之前,必须配置连接管理器,需要指定指定OLEDB 连接管理器,指定:Provider ,SQL Server实例名称,身份验证和连接的数据库。在配置完成之后,可以点击“Test Connection”测试连接管理器是否配置成功。

在列表“OLEDB connection manager”中选择已经存在的连接管理器,或者点击按钮“New...”新建一个连接管理器,该连接管理器的作用域(Scope)是Package级别,只能用于当前Package;开发者可以通过在Project的顶层文件“Connection Managers”下,创建作用域为Project的连接管理器,当前Project的所有Package都能引用该连接管理器。

2,配置数据访问模式

数据访问模式是数据源组件获取数据的方式,SSIS引起共提供四种数据访问模式(Access Mode),分别是:

  • Table or View:从列表"Name of the table or the view"中选择获取数据的外部数据源(Table或View)。
  • Table name or view name variable :从列表“Variable name”中选择变量,该变量的值是外部数据源(Table或View)的名称,在选择该模式时,必须把一个外部数据源(Table或View)的名称存放在变量中;
  • SQL command:在“SQL command text”输入TSQL命令,可以在TSQL脚本中使用参数,在TSQL命令中以 ? 代表参数,需要创建参数映射;
  • SQL command from variable:将TSQL命令保存变量中,数据源组件从变量中获取TSQL命令;

二,参数映射

最常用的数据访问模式是SQL Command,这种模式有很大的灵活性和适用性,最根本的原因是该模式能够在命令中使用参数,动态改变参数的值,能够获取到不同的数据源,实现海量数据的增量更新。

示例:在OLEDB数据源组件中,参数不是使用@VariableName表示,而是使用 ? 代表一个参数,在SQL 命令中,每一个 都代表一个参数:

由于 ? 在SQL命令中出现的顺序是固定的,因此可以通过序号0,1,2(序号从0开始)来定位到每一个参数,从而建立参数和变量之间的一一映射。

点击按钮“Parameters...”,打开“Set Query Parameters”窗体,把变量映射到SQL命令中的参数。

在中映射(Mappings)中, 参数 ? 的序号 和Parameters的名称是相同的,变量(Variables)的名称是在Package中创建变量(Variable),在Package执行时,SSIS引擎把变量的值传递给SQL命令。

变量在Variables窗体中创建,Name是变量的名称,Scope是变量的作用域,分为Scope和组件两个级别;DataType是变量的数据类型,这是CLR数据类型,在选择上,需要考虑CLR数据类型和TSQL 数据类型的映射;Value是变量的值。

三,数据源组件的外部列

外部列,也是数据源的输出列,点击左侧的“Columns”选项卡,能够编辑数据源的外部列,从“Available External Columns”中能够看到数据源所有可用的外部列,可以只输出部分外部列,但是,该外部列已经从外部数据源中获取,并传输到SSIS引擎中,对于无用的数据列,推荐从外部数据源中过滤,也就是从数据源组件的查询命令中过滤,这样,能够减少SSIS引擎的缓存消耗和网络带宽资源。

四,数据源组件的错误输出

数据源组件的外部列是外部数据源的原始数据列,而数据源组件在获取到外部数据之后,会向下游组件输出,该数据列是输出列,从外部列到输出列,有一个数据列的转换。而错误输出,是指在数据源组件出现转换错误时,配置数据列对错误的处理模式,数据列的转化,是指从外部列转化到数据源定义的输出列上,常用的转换错误是错误(Error)和截断(Truncation)。

从描述(Description)中可以看出,数据列的错误是指数据转化(Conversion)错误。

错误处理模式共有三种,分别是:

  • Ignore failure:忽略错误,是指数据源出现错误时,直接忽略错误,而使数据源组件正常运行下去;
  • Redirect row:重定向错误行,是指把错误的数据行重定向到另外一个数据目标组件中;也就是说,如果列值出现错误(Error或Truncation),那么SSIS引擎把该数据行重定向到数据源组件的错误输出(ErrorOutput);
  • Fail component:组件错误,是指当错误时,数据源组件抛出异常,数据源组件停止运行,对已经导入到数据目标组件中的数据,不做改变。

五,数据源组件的高级编辑器 

点击Edit,或直接双击数据源组件,弹出的是数据源编辑器,通过“Show Advanced Editor”按钮,弹出的是高级编辑器,能够编辑数据源组件的底层属性。

高级数据源组件,能够编辑数据源的:连接管理器,组件属性,列映射和 输入/输出属性。

在Connection Managers中,显示数据源组件使用的连接管理器。

1,组件属性

在Component Properties中,能够修改数据源组件的底层属性,在通用属性(Common Properties)列表中,最重要的属性是:ValidateExternalMetadata,用于指定该组件是否在设计时(design-time)验证外部数据源的元数据(metadata),如果设置为false,SSIS引擎延迟到Package运行时(runtime)验证外部数据源的元数据。

用户属性(Custom Properties)和前文的提到的属性相同,不再赘述。

2,列映射

列映射是外部列和输出列的映射,和上文的第三节(三,数据源组件的外部列)相同,不再赘述。

3,输入和输出属性

点击分类“OLEDB Source Output”,从右边的“Common Properties”列表中查看数据源组件的输出属性,大多数属性是无法编辑的:

最重要的一个可编辑属性是:IsSorted,指定数据源是否已经排序,如果外部数据源通过 order by 子句排序,可以设置IsSorted属性为True。

通常情况下,关系型数据库的排序操作,比SSIS引擎的排序组件,执行性能更高,推荐在外部关系型数据库中执行排序,并输出已排序的数据。

外部列(External Columns)是外部数据源的数据列,点击外部列,能够编辑外部列的元数据,示例,点击外部列id,能够查看外部列的属性,并编辑外部列的数据类型。

输出列(Output Columns)是数据源组件向下游组件输出的数据列,在输出列和外部列之间存在元数据的转换,上文提到,转换分为两种类型:Error和Truncation,在输出列的通用属性(Common Properties)中,

转换属性:ErrorRowDispositionTruncationRowDisposition用于指定在转换出现错误时的处理模式,这在上文第四节(四,数据源组件的错误输出)中已提到,不再赘述。

通用属性中,最重要的属性是:SortKeyPosition,默认值是0,表示该数据列不是排序列。 正整数表示升序,负整数表示降序,排序列的序号,从1依次递增。

  • 0:表示表列不是排序列
  • 负整数:表示表列是按倒序排序,对应TSQL排序的 desc
  • 正整数:表示表列是按升序排序,对应TSQL排序的 asc

如果外部数据源的IsSorted属性设置为true,那么请设置输出的排序列的排序键的位置,

例如,外部列按照 order by id asc,name desc排序,那么 id的 SortKeyPosition属性值是1,name的SortKeyPosition属性值是-2。

六,OLEDB 目标组件

目标组件的作用是把数据流加载到关系表中,目标组件在内部使用 insert 或bulk insert 命令把上游组件传递的数据插入到目标关系表中。目标组件共有5种数据访问模式,常用的是:“Table or view” 和 “Table or view - fast load”。

这两种数据访问模式的异同之处是:

  • “Table or view” 模式:目标组件在内部使用insert命令,把数据插入到目标关系表中。
  • “Table or view - fast load”模式:组件在内部使用bulk insert命令,把数据插入到目标关系表中;使用Fast load 选项,能够显著提高数据插入的性能。

1,设置fast load选项的属性

当选择fast load选择的数据访问模式时,目标组件内部使用bulk insert命令批量向目标关系表插入数据,目标组件的UI界面上额外增加以下属性,

这些属性代表的含义分别是:

  • Keep identity :保持ID值,当目标表中存在标识列时,如果不勾选“Keep identity”,那么目标表的ID列插入失败,如果勾选“Keep identity”,那么目标表中的ID列和数据源保持相同。
  • Keep Nulls:如果目标表为某一列设置了default约束,当数据流传递null给该列时,正常情况下会触发目标表的default约束。如果不选中Keep Nulls,那么目标表使用default value来填充数据列;如果选中Keep Nulls,那么目标表保持该列为null。
  • Table Lock:如果勾选该选项,在数据加载期间,整个目标关系表加上表级锁。
  • Check Constraints:检查插入的数据是否符合目标关系表约束,如果事先能够确定插入的数据流符合目标关系表的约束,那么不勾选“Check Constraints”会显著提高数据插入的性能。

当插入大量数据的时候,适当控制 tempdb 和单个事务的大小,能够提高数据插入的的性能。

  • Rows per batch:在执行bulk insert时,配置每一个batch 插入的数据行的数量,默认值是-1,表示不指定数值,由SSIS引擎自主确定每个batch的数据行数量;
  • Maximum insert commit size:指定数据源组件提交一个事务时已经处理的数据行的数量,也就是说,当插入指定数量的数据行时,数据源组件提交一个事务,通过配置该选项,能够控制单个事务的大小;
    • 如果设置属性值为0,指定在一个事务中完成插入所有的数据行,在一个事务中插入所有的数据行,可能导致事务日志过大;另外,如果数据源在导入期间被修改,目标组件会停止响应。
    • 在插入一批数据行时,batch中的任意一条数据违反约束,数据库引擎将回滚整个事务,这意味着,整个batch的数据行插入操作是失败的。

2,目标组件的高级属性

目标组件也有高级编辑器,其输入和输出属性,分为外部列和输入列,外部列是目标组件接收的数据列,输入列是目标组件把数据插入到指定的关系表的数据列。如下图所示:

当目标关系表的元数据和目标组件的输入列的元数据不一致时,需要手动同步,才能插入成功。

OLEDB数据源和目标组件相关推荐

  1. .Net Framework OleDb 数据提供程序要求 Microsoft Data Access Components(MDAC) 2.6 或更高版本。发现当前安装的版本是 2.50.4403.

    问题:  .Net Framework OleDb 数据提供程序要求 Microsoft Data Access Components(MDAC) 2.6 或更高版本.发现当前安装的版本是 2.50. ...

  2. 大数据权限管理组件Apache Ranger简介和原理

    大数据权限管理组件Apache Ranger简介和原理 一.什么是Ranger 二.Ranger的管理页面和Ranger支持的框架 三.Ranger的目标 四.Ranger架构 五.Ranger的工作 ...

  3. Vue实现数据大屏组件轮播效果

    Vue实现数据大屏组件轮播效果 需求 分析 实现 备注 需求  采用Vue结合Echarts制作了数据大屏,由于每个组件占用的空间较小,展示起来不够清晰,所以需要在展示大屏之后,每隔一段时间,就对各组 ...

  4. Angular-cli环境搭建,组件的数据渲染,父子组件传值

    Angular cli-1 博主wx: -GuanEr-,加博主进前端交流群 Angular 脚手架的脚本是 TypeScript 环境搭建 使用 node.js 配置 Angular-cli 的环境 ...

  5. 半导体基础知识(4):无源,有源和机电组件

    文章目录 写在前面 正文 无源元件 有源元件 机电元件 结论 交个朋友 写在前面 半导体的基础知识,从掺杂半导体到二极管到晶体管,再到这篇实际组件,这个小系列只是供从宏观上回顾基础的半导体知识. 本节 ...

  6. 组件间数据交互||父组件向子组件传值-基本使用|| 父组件向子组件传值-props属性名规则

    组件间数据交互 父组件向子组件传值 1. 组件内部通过props接收传递过来的值 2. 父组件通过属性将值传递给子组件 父组件向子组件传值-基本使用 <!DOCTYPE html> < ...

  7. mybatis 连接池_应用框架之Mybatis数据源和连接池

    本文将从以下几个方面介绍Mybatis的数据源和连接池: MyBatis数据源DataSource分类 数据源DataSource的创建过程 DataSource什么时候创建Connection对象 ...

  8. 大数据生态圈常用组件(二):概括介绍、功能特性、适用场景

    三更灯火五更鸡,正是男儿读书时. 小编整理了一些常用的大数据组件,使用场景及功能特性,希望对后浪有所帮助. 分类 名称 简介 功能特点 使用场景 大数据存储 HDFS HDFS是一个分布式的文件系统, ...

  9. vue 父向子组件传递数据,子组件向父组件传递数据方式

    父组件向子组件传递数据通过props,子组件引入到父组件中,设置一个值等于父组件的数据,通过:bind将数据传到子组件中,子组件中通过props接收父组件的数据,这样就可以使用父组件的数据了,循环组件 ...

最新文章

  1. Framebuffer 画点,画线,画多边形,画圆
  2. babel 转换箭头函数
  3. 4测试命令_局域网带宽测试工具-iPerf3
  4. 2018.10.24 NOIP模拟 小 C 的序列(链表+数论)
  5. 使用Oracle SQL Developer 编写运行 PL/SQL 块
  6. 不是所有的程序员都来自匿名区!
  7. 八数码问题引发的思考
  8. 无需代码,1秒搞定QQ和微信多开!
  9. 【头歌】重生之机器学习-线性回归
  10. java移动小球_使用java实现持续移动的小球
  11. FP7195大功率零压差全程无频闪调光DC-DC恒流芯片(兼容调光器:PWM调光,无极调光,0/1-10V调光)
  12. 数据库巡检 java_美团MySQL数据库巡检系统的设计与应用
  13. YDOOK: ANSYS Maxwell 19 教程14:Maxwell 2D 静电场怎样设置激励源 静电场有哪些激励源
  14. java程序设计心得_学习Java编程的学习方法总结
  15. COLING 2014 Paper Generating Supplementary Travel Guides from Social Media
  16. android5.1之vibration学习总结
  17. 百度地图网站获取指定地点经纬度坐标方法
  18. Java抽奖-总概率中奖几率
  19. openGauss单节点一键安装脚本
  20. LabWindows™/CVI中的多线程技术

热门文章

  1. After Effects CC SDK 使用指南(一)—— 序
  2. torch-scatter, torch-cluster, torch-sparse, torch版本对应,cuda
  3. CSS中如何使用高斯模糊
  4. Linux的for循环和if判断
  5. polished css,CSS in JS
  6. python发邮件附件带变量_Python 第17关——邮件还能这样发(QQ邮箱)!
  7. linux convert 常用命令
  8. Android 10.0 移动网络默认为4G
  9. 《人工智能杂记》人工智能简史
  10. VSCode撸猫插件vscode-cats它来了,一起来云撸猫吧