首页 > 代码库 > SSIS 自测题-数据流控件类
SSIS 自测题-数据流控件类
说明:以下是自己的理解答案,不是标准的答案,如有不妥烦请指出。
有些题目暂时没有答案,有知道的请留言,互相学习,一起进步。
133、请描述一下 Conditional Split 的使用方法和使用场景? 它可以写表达式吗? 它可以访问到上游数据的列,变量,以及使用函数吗?
根据不同的列的值,决定数据流的路径,可以写表达式进行判断,只能访问系统变量,用户变量,可以使用函数
134、请描述一下 Data Conversion 与 Derived Column 的使用方法,以及它们之间的区别是什么?
Data Conversion:对数据流中的不匹配数据类型进行转换
Derived Column:产生新的列,不仅可以实现数据类型的转换,还可以派生新的列
135、请描述一下 Multicast 多播的使用方法和使用场景? 请举例说明。
一个输入,多个输出。
136、请描述一下 Aggregate 聚合控制的使用方法,为什么我们要尽量避免在数据流 Data Flow 中使用 Aggregate 控件,在什么情况下可能避免不了要使用它?
Aggregate 聚合:主要是为了汇总数据。
在数据流中,数据量比较大,数据聚合是阻塞的。
137、你是如何理解 Synchronous 同步,Asynchronous 异步,Blocking 阻塞这几个概念的?
同步:等执行结果完成返后才返回,同步组件的输入输出共享同一个缓存
异步:执行开始后就返回,输入输出使用的缓存不是同一个。
阻塞:等待直到可执行时后返回
138、请描述一下 Lookup 控件的基本使用方式,它可以解决什么问题?
查找匹配或不匹配的行的数据
139、在 Lookup 中什么是输入源,引用数据集,缓存的数据是哪一部分的数据?
输入源:来自数据源的数据
引用数据集:生成引用数据集,
缓存的是引用数据集
140、Lookup 有那两种连接方式,分别是什么?
缓存连接管理器
OLE DB连接管理器
141、Lookup 中 OLE DB Connection 连接模式下有哪几种缓存模式?分别是什么?
完全缓存:在执行查找转换前,生成引用数据集并将其加载到缓存中
部分缓存:在执行查找的过程中生成引用数据集
将在引用数据集内有匹配项的行加载到缓存中,并将数据集内没有匹配的行加载到缓存中
不缓存:在执行查找的过程中生成引用数据集
142、Lookup 中字符串对比的时候,在默认 Full Cache 条件下会出现 CASE SENSITIVE 的问题,如何设计或者配置能让字符串比较不区分大小写?
用数据转换列先转换,在Lookup中用函数 lower 和upper 处理SQL语句。
143、Lookup 中 OLE DB Connection 连接模式下 Full Cache 完全缓存模式下数据完全缓存在什么地方,它的缓存过程是什么?
缓存中,在执行查找转换前,生成引用数据集并将其加载到缓存中。
144、Lookup 中 OLE DB Connection 连接模式下 Partial Cache 部分缓存中的匹配缓存区和不匹配缓存区分别指什么?
匹配行:引用数据集内的匹配行
不匹配行:指数据集内没有匹配项的行
145、Lookup 中 OLE DB Connection 连接模式下 No Cache 的工作机制是什么?
在执行查找转换的过程中生成引用数据集
不向缓存中加载任何数据
146、什么是运行时缓存,Cache Transform 缓存转换控件中运行时缓存是如何实现的,请描述使用的过程?
包运行时调用第一个缓存转换将数据写入连接管理器。
如果包中包含多个缓存转换,后续缓存将无法执行写入操作
147、什么是文件缓存,Cache Transform 缓存转换控件中的文件缓存是如何实现的,情描述使用的过程?
148、Cache Transform 中的运行时缓存和文件缓存在使用的时候有什么区别,对同包和不同的包调用缓存时有什么样的使用要求?
149、请描述 Merge 合并转换控件的使用方式,它对输入的数据源有什么要求与限制?
合并转换将两个排序后的数据集合并为一个数据集,两个输入数据集合必须已经排序
150、尽管在 OLE DB Source 查询时使用了排序的 SQL 语句,但是仍然在关联到 Merge 控件的时候出现错误,通常是什么原因,应该如何解决?
没有在控件设置数据集已经排序。
设定数据源属性 IsSorted=true,并在输出列中设置排序的顺序
151、请描述 Sort 排序转换控件的使用方式,如何理解它的 Asynchronous 异步和 Blocking 阻塞特性?
按升序或降序对输入数据进行排序,并将排序后的数据复制到转换输出
152、Merge Join 转换控件的特点是什么?它有哪几种 Join 的方式,如何使用?请描述各种 Join 方式的使用过程。
输入数据必须有序,内部联接,左外部联接,完全外部联接。
153、Union All 转换控件的使用和 Merge,Merge Join 转换控件的使用有什么不同? 它们三者直接的异同点是什么?
Union All :输入数据集可以不排序,合并数据
Merge :输入的数据集合必须有序,合并数据
Merge Join: 输入的数据必须有序,关联数据
154、如果需要在数据流 Data Flow 中记录从源插入的目标的条数,可以有什么样的实现方法?
利用包的事件 ProExecute 和 PostExecute 事件查询总行数,做差运算。
155、请描述一下 Row Count 转换控件的使用,如何记录数据流 Data Flow 中条数并赋值给一个变量,且插入到日志中?
定义一个变量,并指定变量给控件。
156、如何在 SQL 以及 SSIS 中实现 PIVOT 操作?
PIVOT 操作及为数据的行转列操作。
157、在 SSIS 2012 ETL 中,PIVOT 转换控件中的 Pivot Key, Set Key, Pivot Value 分别是指什么?
pivot key:表上面一行(标题行)的值的列
set key:指定用于表左侧列的值的列
PIVOT VALUE:指要汇总的列的值
158、在 SSIS 2012 ETL 中,如何通过 PIVOT 控件自动生成转换的列 Pivoted Output Columns?需要通过什么样的设置?
先输入所有的透视列的值,点击按钮“立即生成”。
159、如何在 SQL 以及 SSIS 中实现 UNPIVOT 操作? 在使用 UNPIVOT 的过程中,能不能从聚合数据还原到 PIVOT 之前的细节数据?
不能还原到PIOVT之前的细节数据
160、在 SSIS 2012 ETL 中,UNPIVOT 转换控件中的 Input Column, Destination Column 以及 Pivot Key value column name 分别指的是什么?
输入列:从可用输入列中选取的值
目标列:提供数据列的名称
透视键值:提供透视键值列的名称
161、在数据流 Data Flow 中,Script Component 大概能够使用到的场景有哪些? 它有哪几种转换类型?
使用系统提供的控件无法实现功能
目标转换,源转换,转换
162、在数据流 Data Flow 中,Script Component与控制流 Control Flow 中的 Script Task 有哪些不同?
Script Task:
脚本任务在设计器的控制流中配置,在包的数据流外部运行
脚本任务可以完成几乎所有一般用途的任务
脚本任务在包工作流中的某个点运行自定义代码,除非放在循环或事件中,否则只运行一次
脚本任务有三个页面:常规,脚本,表达式,ReadOnlyVariables,ReadWriteVariables,ScriptLanguage
使用 Dts 属性访问包的其他功能。
Script Component:
脚本组件在数据流页面配制,表示数据流任务中的源,转换,目标
脚本组件也运行一次,通常为数据流中的每行数据运行一次主处理例程。
脚本组件有四个页面:输入列,输入和输出,脚本,连接管理器
脚本组件使用类型化的取值函数属性访问特定包功能
使用this.Variables访问变量
163、请分别说明 Script Component 中默认的类型下 PreExecute(), PostExecute(), InputXXX_ProcessInputRow() 方法各自的作用是什么?
事件PreExecute:指事件开始执行前
事件PostExecute:指事件结束执行后
事件InputXXX_ProcessInputRow():在数据转换过程中,处理每行数据时触发
164、Script Component 中 InputXXX_ProcessInputRow(Input0Buffer Row) 参数 Row 的生命周期是什么,它表示什么?
当前行,当前行的数据
165、如何使用 Script Component 来实现数据流 Data Flow 中从源到目标的行计数?
166、如何使用 Script Component(Source 类型)来访问并遍历一个平面文件的每一行?
先创建平面文件连接管理器,在代码中读取平面文件连接管理器,循环读取文件,
167、如何在 Script Component (Source 类型)创建一个或者多个 Output 输出?
在脚本组件编辑器页面添加输出参数
168、描述一下在 Script Component (Source 类型) 中的 Script 中创建输出流的过程,即 CreateNewOutputRows() 方法的使用。
169、如何在 Script Component (Source 类型)中的 Script 访问输出 Buffer,如何添加一个新的 Output 行往下输出?
170、什么是 Script Component 同步 Transformation?应该如何设置?
同步:不需要将缓冲区复制到新的内存空间中。
设置属性 SynchronousInputId 为 “无”
171、Script Component (Transformation 类型) 中的 Output 中 SynchronousInputID 的作用是什么? 如果值是 None 或者 0 表示是什么意思?
172、Script Component (Transformation 类型) 中的 InputXXX_ProcessInputRow(Input0Buffer Row) 方法中,Row 包含了那两部分的内容?
173、在数据流 Data Flow 转换组件中,如何判断这个转换组件是一个同步 Synchronous 的还是一个异步 Asynchronous 转换组件?有哪些基本的判断方法?
174、如果需要将 Script Component (Transformation 类型) 由同步 Synchronous 变为异步 Asynchronous 需要做哪些设置?
175、在 Script Component (Transformation - 类型 - 异步) 中,如果有多个输出,同步转换和异步转换是否可以共存?
176、在 Script Component (Transformation - 类型 - 异步) 中,InputXXX_ProcessInput() 方法和 InputXXX_ProcessInputRow() 方法的区别是什么?
177、在 Script Component (Transformation - 类型 - 异步) 中,InputXXX_ProcessInput(Input0Buffer Buffer) 方法中的 Buffer 参数应该如何理解? 它包含的数据应该是什么?
178、为什么说 Script Component (Transformation - 同步) 是一个 Non-Blocking 无阻塞转换,而(Transformation - 异步)是一个 Semi-Blocking 半阻塞转换?
179、如果我们在 Script Component 中脚本中同时看到这两个方法 InputXXX_ProcessInput() 和 InputXXX_ProcessInputRow(),我们对 Script Component 的配置可能采取哪些方式? 它们要表达的转换形式可能是什么?
180、描述一下在你所经历过的项目或者练习中对 Script Component(Destination - 类型) 的使用是如何进行的?
在函数输入0_ProcessInputRow中遍历每一列的值
181、如何在 Script Component 中访问连接数据库中的数据表?需要采用 OLE DB 连接方式还是 ADO.NET 连接方式?
用属性this.ComponentMetaData.InputCollection[0]访问,两者都可以
182、请描述一下在 Script Component 中访问连接数据库并向指定数据表插入数据的过程,所需要涉及到的 SQL 对象有哪些?
先获得数据库连接字符串,利用SqlConnection建立,SqlCommand 执行插入SQL命令
SqlConnection,SqlCommand
183、请大致描述一下在 Script Component 组件的四种转换操作中(Source, 同步 Transformation,异步
Transformation,Destination)通常哪一种或者哪两种转换方式效率要高一些,哪一种或者哪几种转换方式效率要低一些,请大致分析一下原因。
184、结合数据流中的这些组件 Data Conversion, Derived Column, Aggregate,Sort,Script Component 描述一下你是如何理解阻塞,半阻塞,完全阻塞,同步,异步这些概念的? 以及描述一下你所了解的控件哪些是属于阻塞,半阻塞,完全阻塞,同步,异步类型的?
同步组件:同步组件的输出和输入共享一个缓存,即输入多少行就有输出多少行,输入输出同步,同时发生
Data Conversion, Derived Column
异步组件:它的输出用的是一个新缓存,它不会重用输入的缓存。
Sort,Aggregate,Merge,Merge join,Script Component
阻塞:也称为行转换,整个过程不建立新行,也不删除行
半阻塞:转换组件会控制输入行一段时间。转换组件接到一行数据不会立即处理,等这批处理完后在返回。
Merge,Merge Join,Pivot,Unpivot,Union All
完全阻塞:会完全控制全部数据。全部处理完了才返回。
Aggregate,Fuzzy Grouping,Fuzzy Lookup,Sort
185、在数据流中 OLE DB Command 组件与控制流中的 Execute SQL Task 有哪些异同点?
相同:都可以直接执行SQL语句
异同:Execute SQL Task,在控制流中除非循环,否则执行一次SQL语句
OLE DB Command,有多少行,就执行多少次
186、在数据流中 OLE DB Command 组件与 OLD DB Destination 有哪些异同点?
对数据流中的每一行运行SQL语句
187、在 OLE DB Command 中使用普通的带参数的 SQL 语句与带参数的 Stored Procedure 有什么样的细微差别?
OLE DB Command:每次执行SQL语句需要编译一次,Stored Procedure,不需要
188、虽然说 OLE DB Command 是一个同步转换组件,但为什么还是要说它是一个 Performance Killer 性能杀手,它的执行特点是什么?
每次运行SQL 都要重新连接,消耗性能比较大
189、同步转换组件的效率是否一定要比异步转换组件的效率要高,如果不一定的话可以举出两个例子来说明。
190、在一些使用场景下,可以通过什么样的方式来实现替换 OLE DB Command 的使用,以达到提升效率的目标?
可能使用数据源组件或目标数据源组件,或脚本组件
191、描述一下什么是 Slowly Changing Dimension 缓慢渐变维度,在什么场景下我们需要使用到这个概念来解决一些实际问题?
协助数据仓库维度表中的记录更新与插入
在维护数据仓库维度表时会使用
192、描述一下你所了解的解决缓慢渐变维度的一些设计方式和方法?
193、什么是 Business Key 业务主键,什么是 Surrogate Key 代理主键? 使用 Surrogate Key 可以解决什么样的问题,有什么样的好处?
唯一的标示一条记录且值不会改变
代理铸件,主键的备用键
194、在 SSIS 中可以通过哪种控件来实现 SCD,描述一下其实现的步骤,包括在 SSIS 2012 ETL 中 SCD 提到的三种 SCD Type 有哪些?
lookup,union all
195,描述一下在 SSIS 2012 ETL 中的 SCD 数据流执行的过程,SCD Type 1 和 SCD Type 2 的逻辑实现过程?
196,除了 SSIS 2012 ETL 自带的 SCD 转换控件以外,还可以通过哪些方式来实现 SCD?
197、在微软 SSIS 2012 ETL 中,对于 SCD Type 2 的可以通过起始时间的设置,或者状态的设置二选一来实现标识当前维度和维护历史维度行,如何设计让这两者并存出现在维度表中?
198、请大致说下对于增量数据的加载有哪些实现方式? 比如对有时间戳的原始数据和没有时间戳的原始数据增量加载可以如何设计和实现?
199、请描述一下 Check Point 的使用场景以它的实现过程和基本的配置。
200、如何设计一个 ETL 来监控某指定数据库,比如数据仓库各表的大小,行数每天的变化情况? 并根据这些变化情况大致了解每天的增长量,对以后增长趋势的预测?
201、如何设计一个 ETL 监控或者同步指定目录下各中文件,或指定后缀文件的大小变化,及相关属性变化等信息,比如数据库文件大小变化的监控?
SSIS 自测题-数据流控件类