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:表上⾯⼀⾏(标题⾏)的值的列
t 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 连接⽅式?
⽤属性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 监控或者同步指定⽬录下各中⽂件,或指定后缀⽂件的⼤⼩变化,及相关属性变化等信息,⽐如数据库⽂件⼤⼩变化的监控?