开篇介绍
微软BI SSIS 2012 ETL 控件与案例精讲 (http://www.hellobi.com/course/21) 课程从2014年9月开始准备,到2014年12月在 天善BI学院 (http://www.hellobi.com)正式上线。
- 100多天的时间共完成了 51个视频的录制,包含49个原创案例,总共1460余分钟,共计 24 个小时。
- 每一个案例的准备时间耗时 4 - 5个小时,有的案例的设计,思路的整理耗时 8 个小时 - 16 个小时。
本课程涵盖了微软 BI SSIS 几乎所有常用控件的讲解,讲解的内容不是按照书本照本宣科的简单的告诉大家如何使用,而是通过大量的案例,代码对各个知识点进行穿插讲解。每一个基本案例都是由我个人原创,并加入了个人的测试,总结和归纳部分。每一个案例自始至终,来龙去脉,所有的代码和实现操作过程均在视频课程中一步一步现场编程和实现。因此大家是完全可以按照视频中的操作步骤实现所有讲解的案例,通过对案例的总结和归纳是可以掌握案例中讲解的每一个知识点的。
本课程全部面试题将添加至在文本最下方,或阅读 自测面试题 200 问 (http://www.cnblogs.com/biwork/p/4177033.html)
课程试听可以访问 http://www.hellobi.com/course/22
学习方法与步骤
学员的学习定位
- 对于有 SSIS ETL 开发经验的学习者,可以针对自己的薄弱环节跳跃式的进行学习,但还是建议参看文本最下方的面试题看是否完全可以口述描述回答清楚。如果不能自己口述回答描述清楚,可以选择对应的课程进行学习,这样可以查漏补缺提高学习的效率。
- 对于没有太多 SSIS ETL 开发经验的学习者,或者刚入门,转行的学习者。我们的建议是一步一步跟着视频课程来学习,按要求下载练习的数据,文件等资料。我们的课程规划也是一步一步引导初学者由点到面,一步一步建立完整的 SSIS ETL 技能体系。
学习的通用步骤
第一步,按照课程课时的顺序一个一个视频观看,在第一次学习的时候可以跟着视频进行操作,把完整的案例做出来。做完案例之后,在不看视频的情况下把案例能够顺利的做出来,表示在操作上我已掌握。
第二步,查看 微软BI SSIS 2012 辅助阅读博客 (http://www.cnblogs.com/biwork/p/3960294.html)是否有对应的辅助阅读博客。如果有的话需要花点时间阅读一下,或者最好能够动手实际操作一遍。案例与博客的区别在于:对于课程中的大部分案例是考虑到技能的项目的实用性,以实战为目的讲解。但还是有部分案例在设计的过程中是需要分解一些实际的项目实现过程,为了更好的体现出技能点,知识点,因此在设计上会主要考虑如何让大家听懂,理解清楚,掌握如何使用。而博客中记录的问题则一般是平常工作中遇到的难点,疑点进行总结,并且是跨案例知识点的。因此,学习完案例,再看博客会帮助大家对这些技能点,知识点的应用理解的更加深刻,可以更好的帮助大家消化这些内容。同时,由于跨知识点的原因,大家很容易明白这个案例中提到的知识点还与哪些案例相关,它们是如何进行配合使用的。这个过程就是一个由点到面的学习过程,是构建强大知识体系的一个非常重要的环节。当一个人具备一个知识体系的时候,即使一些细节的实现不会那么清楚,但是并不会妨碍他对这类问题的解决,可以非常容易的找到薄弱环节进行针对性的学习和攻克。这就是系统性学习和零散性学习的最大区别,希望每一位学员能够重视知识体系的构建过程与方法,提高学习效率。
第三步,在学习完每一个案例与对应的博客阅读内容之后,对自己进行一个模拟面试,看本文最下方的每一课对应的面试题。通过自我回答和总结的方式看看每一个问题是否可以清晰的连贯的回答上来,如果不能答出来,还需要回头看视频和练习案例,直到能够完整的回答出来为止。
第四步,在认真对待学习的前提下,学完整个课程以及阅读完对应的博客之后,在技能方面是完全具备一个比较扎实的功底的。但是需要提高的是,独立思考,摸索和解决问题的能力,如何将所学的知识转换运用起来,将技能变成实际的能力。为此,本课程还提供了一些附加的案例练习作业。此案例练习作业由浅入深,逐步的增加难度。有的案例可以参考对应的博客来独立解决,但有的案例则需要大家进行思考,搜索和查阅相关的解决办法。这个过程就是锻炼大家在实际工作过程中需要具备的能力:
- 思考解决思路的能力,解决的思路是什么?
- 分解问题和实现难点的能力,哪些是我们能做的?哪些是我目前不知道如何去做的?
- 根据分解难点进行相关查阅和搜索解决方案的能力,这个问题应该如何去搜索,搜索什么样的内容?
- 大胆灵活运用已掌握的基本技能的能力
- 不断尝试解决思路的能力,一个控件一个思路搞不定,需要换一种思路,反复尝试不气馁和抗压能力
- 纠错能力,独立排查问题,事故的能力
- 解决了问题,我的归纳总结能力,每一个问题的解决过程就是一种经验的提升
这些案例的完成一定会遇到上面所提到的问题,每一个问题的解决就是一个能力的积累,一次经验的上升。
我曾经在一个 JAVA + IOS 项目中,需要解决 JAVA 服务器端与 IOS 手机应用程序端解决 Web Service 接口的调用问题。由于没有任何的 IOS 开发经验,在没有任何技术支持的情况下,是抱着一定要解决这个问题的想法,尝试了三套不同的 Web Service 接口,连续三天三个通宵最终成功解决。这个过程就是上述我所描述的问题,一种思路不行就换种思路,根据不同的报错信息进行排错,筛选方案,大胆尝试与分析,不断尝试到最终解决。
第五步,在上述步骤全部完成之后,我可以对大家进行模拟面试。模拟面试可能是跨知识点的,也可能是对其中的某些重要知识点进行提问。通过这么几个步骤的锻炼,我相信大家是完全可以对这门课程掌握的非常好的,完全可以建立起一个完整的知识和技能体系。对大家的点,面,体系性的提高和信心的提高是有非常大的帮助的。同时,对于国际学员,我可以提供英语模拟面试,帮助大家在一个更好的氛围中适应这种面试。
面试的技巧
通常的弊病
在我的工作经历中,我面试过很多 BI 开发人员,其中有一点最为忌讳的就是在简历上写上精通微软BI,精通 SSIS, SSRS, SSAS。一般作为一个 2-3年的 BI 开发人员,在一个正常的 BI 技术成长体系是很难达到精通的程度的。所谓精通,应该是具备一个完整的知识和技能体系,遇到过各种各样的技术问题并解决掉的。一个能称之为精通的 BI 开发人员,无论是基础知识还是框架设计能力,解决方案的提出能力,各种项目的锤炼都应该是达到了一个非常之高的水平。
通常情况下,在我所熟知的微软BI的领域里,只有少数一部分人能够说精通微软BI的 SSIS, SSRS, SSAS 中其中之一或者之二。对于这类与实际能力不符的面试者,基本上非常简单和基础的一些问题就可以排除掉,可以说和简历上技能的描述完全不符的。自然也从侧面反映这些面试者对技术的态度抱有很大的侥幸心理,对于技术上的不尊重,我们的整个面试团队也自然会联想到该候选人对于工作对于项目的态度也是否一样不严谨。
所以,尊重技术,认真的态度对一个 BI 开发很重要。包括我对于我自己的技术定位,仍然只定位于很熟悉某一类或者某几类产品与技术,技术在某些方面还可以,但远远没有达到精通的水平。4年的微软BI 开发经验,我还需要 4-5年类似于现在这样的步伐我觉得才有可能达到一个精通的水准。
解决的方法,如何避免技能上的缺陷
放低姿态很重要,对于 BI 职位要求比较高的用人方对于一个人的技术能力与否是可以通过技术面试环节来判定的,个人简历上的技术描述仅仅是一个参考。我们所面试的一些 BI 开发者,其实在技术的选择上是有针对性的。比如,我们项目中急需的 SSRS, SSIS 开发工程师,那么我们就会对 SSRS, SSIS 部分的内容进行重点考察。如果是对 SSAS 有高要求的,那么会对 SSAS 进行重点考察,而并非是真正需要一个全面掌握微软BI技能的,因为我们知道这类全才一般是很难碰到的。在我们的一些面试经验中,往往在某一项或者某两项能力比较突出的候选人都通过了面试。
比如曾经面试一个候选人,他对 SSRS 并不熟悉,对 SSIS ETL 也并不是非常熟悉,但是他对 SSAS 很熟悉。那么在面试的过程中,当我们问到 SSIS, SSRS 的时候,尤其是 SSRS 答的很不好。但是他的问答就是 SSRS 我做的比较少,不太熟悉。对于 ETL 控件也不是非常熟悉,但是常用的操作还是没有问题。那么,自然后面的面试过程我们就不会主动去提到 SSIS, SSRS。最后,SSAS 面试的很不错。那么在我们的评价中,SSAS 的能力很突出,但 SSRS, SSIS 的薄弱并没有给我们带来很大的负面印象。至少不会一开始说我们这几块都非常熟悉,最后面试的反差很大。在一个没有印象反差的前提下,坦率,诚恳让我们觉得这个候选人在对待问题的态度上是没有问题的。SSAS 很熟悉已经证明了他是具备比较不错的技术能力的,只是因为受限于经历的项目没有太多的参与到 SSRS, SSIS 的开发中来。能够扎实的掌握微软 BI 某一个模块的能力,说明也完全有能力掌握其它几个模块的能力,假以时日在项目中慢慢引导是完全没有问题的。
对于这位面试者我们给出的结论是:
- SSAS 很不错,SSIS 基本操作会,SSRS 不熟悉,做过基本操作
而对于之前反差比较大的结论就是:
- SSAS 不精通, SSIS 基础不过关, SSRS 不精通
不可否认,上述的面试过程一定是存在很多的面试瑕疵。但是需要考虑到实际的薪资情况:
- 往往这类在简历上写上精通的候选人,对于薪资的要求是比大多数候选人高出很多的,因此面试的过程也一定是按照精通的水平来面试的。可能一些细微的瑕疵,不好的印象就会带来负面的评价,即期望与实际成反比,机会自然就会少很多。
- 往往做事比较严谨的一类候选人,他会主动的避免过多展现自己的缺陷部分,而主动的突出其优势部分,优势部分的得分会给面试者很好的印象。坦率来讲这个过程是存在一些面试印象分的,一个优势,加上一个不错,再加上一个可以提高的评价,基本上这个候选人是可以通过面试的。薪资水平在同等职位上一般能满足的往往都会满足,因为我们觉得某些技术上的不足是完全可以花时间来弥补的,他已经证明了他某一个强项上的技术能力,他在其它方面也一定有能力可以达到。
所以,对于我们很多 BI初级开发者来说,尽量的在面试过程中避免过多的暴露自己的不足。在初期选择相应的职位时,放低姿态,需要完全展现自己很强的那一面。因为在一个项目团队中,很难让一个 BI 开发者即做 SSRS,又兼顾 SSIS 和 SSAS。每个人都有分工,一般最多一个人专注于某一项或者某两项,在其它项上主要就是一个 Backup。
针对于这种情况,在面试准备期间需要考虑在目前的技术储备上,哪一项是我最熟悉的最擅长的,哪一项是我目前比较熟悉但是需要加强的,哪一项是我目前不太熟悉但是以后会有所规划的。当你可以清晰的了解到自身的技术储备和未来技术提升规划的时候,把你的想法坦诚的和用人方进行沟通。一旦用人方正好在你熟悉和擅长的领域或者你熟悉但需要加强的领域有职位空缺的时候,你成功的几率就会非常高。前提就是,你所擅长的一定是你真正擅长的,你需要准备的非常充分并且展现的淋漓精致。
SSIS 到底包含哪些技术体系
学完这个课程之后,包括博客的阅读,项目案例作业的解决。只要能够认真完成上述几个学习步骤,我可以肯定的说这个课程是掌握的非常不错的,在 ETL 控件的使用能力上一定相比于同等经历的 BI 开发者来说是完全可以更甚一筹的。因为你不仅仅拥有一个知识体系,并且也具备了对一些比较复杂问题的解决能力。
那么是不是说这么课程学完了就可以搞定 SSIS ETL 的一切? 这个坦率来讲也不是的。SQL Server Integration Service (SSIS) 我们可以把它拆分成三大类:
- ETL 的基本控件操作(本课程)解决的是从 Source 到 Destination 的 Extract, Transformation,Loading 的实现。
- 数据仓库 Data Warehouse 的设计与实现,需要具备一定的设计思想,它是基于 ETL 基本控件操作的。
- ETL 框架,日志框架,调度框架的设计与实现,它也是基于 ETL 基本控件操作的。
作为我个人而言,我是从纯的 ETL 开发,不涉及到数据仓库的设计,不涉及到各种框架应用来起步的。在我的微软 BI 头两年工作中,在美国 WI 的 SHP (Security Health Plan) 医疗保险项目,做的就是 ETL 开发。当具备了 ETL 开发能力的时候,进入到其它项目上了解了数据仓库的实现,完全也可以跟着尝试去独立设计部分的维度表和事实表,到最后独立的设计与开发。因为数据仓库更多的体现的是一种解决思想和设计方案,它的具体实现还是需要借助于基本的 SQL ,ETL 控件来完成。从基本的ETL开发到设计思想的过渡和实施数据仓库项目,这个过程是顺其自然就可以过渡的。
对于 ETL 框架,日志框架,调度等是基于 1-2年的BI开发之后,慢慢的总结出来的一些更好的维护和管理 ETL Package 包的理念,这个理念也是可以从项目中慢慢摸索和获得的。
当能够认识到这个体系的完备过程,自然就应该认识到作为 ETL 的基础这门课程的重要性。
如何准备 ETL 方面的面试突出本门课程学到的技术
一般在介绍自己的工作和技术情况的时候,可以主动的和面试官提到你在 SSIS 方面的技能能力和储备。
比如说:我对 SSIS 很熟悉,基本的 ETL 控件在我的各个项目中都用到过,包括像控制流 Control Flow,数据流 Data Flow 里面的常用控件大部分我都用到过。
当主动提及某一方面的技术,且用人方恰好有这方面的需求的时候,他会主动的深入了解这方面的技能。那么可能会随便找几个控件面试一下你的基础能力,比如介绍一下 Lookup 的用法,介绍一下 Merge ,Merge Join ,Union All 的区别,介绍一下 SCD 实现的几种类型,Script Task 或者 Script Component 的用法, Foreach Loop 的用法。
如果能够很好的学好本门课程,这些问题的回答应该是非常轻松的,并且可以深入的引导用人方并展现你对这些控件的掌握能力,比如:
- 通过 Lookup 你可以主动讲起 Lookup 的几种缓存方式,各自的优缺点。进而提到 OLE DB Cache 和 Cache Transform,进而提到运行时缓存和文件缓存,包括在项目中遇到的 Case Insensitive 等问题,包括通过 Lookup 实现 SCD。
- 通过 Merge, Merge Join,Union All 可以提到它们之间的差别与应用场景等,这些内容如果不是有心准备,很难一下子说的非常明白的。
- 通过 SCD 可以介绍到几种实现方式,通过 SCD 控件自身实现,SQL Merge 实现, Lookup 实现。
- 通过 Script Task 可以说一下微软的一个 Bug,这都是可以给自己加分的。
- 通过 Script Component 可以说到与 Script Task 的区别,可以提及到 Script Component 中三种转换模式,每一种模式的运用。还可以提到 Transformation 下同步,异步的差异,几种转换类型的性能。借此提及同步,异步,阻塞,半阻塞,完全阻塞等概念。借此提及哪些组件是同步的,哪些是异步的,同步和异步的性能是否一定是同步的效率高?借此可以提及 Sort, Aggregate 的性能应该如何避免使用。
- 谈到性能还可以提及 OLE DB Command 的性能杀手问题等等等等。
- 通过 Foreach Loop 可以提及它下面的那些分类都是如何在各个场景用到的,怎么样循环文件,怎么样循环 Excel 上的 Sheet 页。
- 最后在通过项目案例作业告诉用人方你所做过的哪些解决方案,比如监控数据表增长情况,展示你的报表等等等等。
- 这一系列的知识体系可以从一个点全部的交代出来,体现的就是你扎实的 ETL 功底,而这些内容都在我们的课程 微软BI SSIS 2012 ETL 控件与案例精讲 (http://www.hellobi.com/course/21) 有完全的淋漓精致的体现!
如何更好的补充面试中的技术储备
为了更好的准备面试,找一份起步的工作,建议可以先从 SSRS 2012 Metro UI 高端报表视频教程 (http://www.hellobi.com/course/15) 学起。
这门课程也是和 ETL 课程一样进行的体系性讲解,35个基本案例让大家足以掌握 SSRS 报表开发过程中常用的开发技能。并且在高级设计篇提高大家的报表设计能力,特别用到了 WIN 8 风格 METRO UI设计理念。这是我在微软的SSRS项目上所用到的一些设计方法,深受客户喜欢。并且在我目前的很多项目中,我大量的使用到了这些理念,所制作的报表在风格上有非常高的辨识度。所有案例均为原创,不按照书本千篇一律的讲解和 PPT 的讲解模式。每一个案例从无到有,也是一步一步的拖,拉,拽,写代码实现。每一个案例大家都可以做的出来,关于全部案例的展示大家可以参考 高大上的Microsoft Reporting Service 2012 报表课程案例展示 (http://blog.tianshansoft.com/archives/1795.html)。
微软BI SSIS 2012 ETL 控件与案例精讲课后问答自测及面试题
下面这些问题属于 微软BI SSIS 2012 ETL 控件与案例精讲 (http://www.hellobi.com/course/21) 课程中的对应的问答自测题,对于学完本课程的每一课时和阅读完相关辅助阅读博客之后,都需要通过以下自测题来巩固课程中所学习到的基本知识点。
此自测题也可以作为面试题来准备,虽然对于 ETL 控件的面试大多不会考察到这么细的粒度,但是仍然可以作为面试官考察 BI 开发者对基础知识点的掌握的熟练程度与深度。在 SSIS 中,一个基本的配置改变,对数据的走向与控制可能就会有天壤之别,所以这些基础的技能点还是值得大家在学习 SSIS ETL 控件的过程中好好总结的。
也可以单独访问这篇文章阅读 自测面试题 200 问。
自测题分类
- 文件操作类(自测题 1 - 62 )
- 控制流控件类(自测题 63 - 133)
- 数据流控件类(自测题 134 - 202)
- 什么是控制流,什么是数据流,控制流和数据流之间的关系是什么?
- Connection Manager 连接管理器的作用是什么?不同的数据流组件可以使用同一个 Connection Manager 对象吗?
- 在 OLE DB Source 中什么是 External Column? 什么是 Output Column ?
- 请描述一下 Flat File Connection Manager 连接管理器 和 Flat File Destination 组件的关系。
- 在 Flat File Connection Manager 连接管理器中 Text Qualifier 的作用是什么?在什么时候需要被用到?
- 在 Flat File Connection Manager 连接管理器中 Row Delimiter 和 Column Delimiter 的作用分别是什么?
- 描述一下比较常用的 Column Delimiter 有哪些?至少四种。
- 在 SSIS 2012 中,有那四种文件格式类型?例如 Delimited 是第一种。
- 请举例说明 Delimited 文件格式的使用场景,所针对的文件格式是什么样子的?
- 请举例说明 Fixed width 文件格式的使用场景,所针对的文件格式是什么样子的?
- 请举例说明 Fixed width with row delimiters 文件格式的使用场景,所针对的文件格式是什么样子的?
- 请举例说明 Ragged right 文件格式的使用场景,所针对的文件格式是什么样子的?
- 请描述 Fixed width with row delimiters 与 Ragged right 的区别和联系。
- 在这四种文件格式中,哪一种是针对不换行的定长文件格式的,Delimited,Fixed width,Fixed width with row delimiters,Ragged right?
- 请描述如何使用数据流组件中 Flat File Source 组件的用法。
- 请描述数据流组件中 OLE DB Destination 组件的用法。
- 对于源文件中有列标题和没有列标题的文件分别应该在 Flat File Connection Manager 中设置什么?
- 请描述控制流组件中 Execute SQL Task 组件的基本用法,使用目的?
- 如果源端使用使用变量类型的 SQL 语句,它的 Output Column 顺序会发生改变,如何解决这个问题?
- 如果在源文件中有空值,如何让它在输出到目标表的时候使用目标表列种的默认值 Default Value ?
- 如果在源文件中有空值,如何让它在输出到目标表的时候显示为 NULL ?
- 如果在源文件中有空值,如何让它在输出到目标表的时候显示空白字符串 ?
- 请举例说明在 Flat File Source 中 'Retain null values from the source as null values in the data flow' 的用法?
- 请描述在 OLE DB Destination 的两种不同的 Data Access mode 'Table or View' 和 'Table or View - Fast Load ' 对于源文件空值处理的影响?
- 请描述在 OLE DB Destination 的 'Table or View - Fast Load' 模式下 Keep Nulls 配置的作用?
- 请总结在 OLE DB Destination 中 Access Mode 中的各种配置对源文件中 NULL 值的影响?
- 描述在 OLE DB Destination 中的 Data Access Mode 'Table or view' 和 'Table or view - fast load' 的区别?
- 描述在 OLE DB Destination 中 Table or view - fast load 中 Keep Identity,Table Lock,Check Constraints 的大概作用?
- 在数据流中,可以通过什么方式查看在数据流执行过程中的数据?
- 如何输出不规则的平面文件,即此目标文件包含有多个 Section,每个 Section 的格式各不相同,请描述一下思路?
- 在 Flat File Destination 组件中,'Overwrite data in the file' 选项的作用是什么,可以在什么场景下使用的到?
- 描述在数据流源端中,比如 Flat File Source 组件,它的 Error Output 选项中包含了哪些基本的信息?
- 请描述在数据流源端中,比如 Flat File Source 组件它的 Error Output 中 Error 和 Truncation 的区别是什么?它们有哪几种配置类型?
- 请分别解释在源端的 Error Output 中,Fail Component, Ignore failure, Redirect row 的作用分别是什么?
- 当在源端的 Error Output 的 Error 选项中选择了 Ignore failure,当目标表对数据有严格的验证时,源文件中出现转换错误,包执行后出现什么情况?
- 当在源端的 Error Output 的 Error 选项中选择了 Ignore failure,当目标表对数据有严格的验证时,源文件中出现转换错误,且目标表的 Error Output 也选择了 Ignore failure,包执行后会出现什么情况?
- 当在源端的 Error Output Truncation 选择了 Ignore failure,当目标表对数据有严格的验证时,源文件中出现超长的字符,包执行后出现什么情况?
- 当在源端的 Error Output Truncation 选择了 Ignore failure,当目标表对数据有严格的验证时且目标表的 Error Output 也选择了 Ignore failure,源文件中出现超长的字符时,包执行后会出现什么情况?
- 当包执行失败的时候,可以在什么位置查看到包执行的整个流程,以及报错的信息?
- 对于源端的 Error Output 重定向 Redirect Row 的输出是什么内容,包含了哪些信息?
- 对于目标端的 Error Output 重定向 Redirect Row 的输出是什么内容,包含了哪些信息?
- 如果需要获取类似于错误行所有 Column 的数据,以及 Error Code 以及 Error Column 编号应该是在源端还是目标端的 Error Output 进行配置?
- 如果需要获取所有完整的正行的错误行数据到错误文件或错误表留给以后手工检查,应该是在源端还是目标端的 Error Output 进行配置?
- SSIS 2012 ETL 中有没有 XML Destination 控件吗?
- 如何在数据流中将数据输出到 XML 文件? 需要使用到哪些基本的控件,在 SQL 查询的时候应该要注意什么?
- 如何在控制流中奖数据输出到 XML 文件?
- 在使用平面文件构建 XML 文件输出的时候,对输出数据的类型有什么样的特别要求? 为什么要使用平面文件 Flat File 而不使用 Raw File ?
- 在 Execute SQL Task 中,什么时候会使用 Result Set 为 XML 的配置? 如何将 Result Set 为 XML 的返回值赋值给包中的变量?
- 在 Script Task 中,支持那两种编程 Script?
- 在 Script Task 中,如何访问包中的变量并取值?
- 如何在 Script Task 中将字符串输出到一个文件,会使用到 C# 的那些知识,需要引入什么命名空间?
- 什么是 XSD?
- 在使用 XML Source 时,当只有 XML 文件,但没有 XSD 文档的时候应该如何解决 ?
- 什么是 CSV 文件,它的全称是什么?
- 在 SSIS 2012 ETL 中并没有 CSV Source 和 CSV Destination,应该分别使用那种数据流控件来表示 CSV 的 Source 和 Destination?
- 在数据流中 Derived Column 的作用是什么? 表达式中可以实现哪些基本的操作?
- 在构建 CSV 输出的时候,使用 Flat File Destination 组件时应该选用哪种文件格式?
- SSIS 2012 ETL 中默认支持到 Excel 的最高版本是哪一个版本?
- 在处理 2013 版本的 Excel 的时候通常需要安装什么样的驱动?
- 对 Excel 2013版本支持的驱动通常情况下是需要在 64位模式下还是32位模式下运行包?
- 描述一下如何将表中的数据输出到同一个 Excel 文件的不同的 Sheet 页中,实现的思路和过程是什么?
- 如何将一个 Excel 文件的不同 Sheet 页的数据加载到同一个表或者不同表的实现思路和过程是什么?
- 描述一下 Execute SQL Task 的作用,在 ETL 开发过程中哪些情况下会使用到 Execute SQL Task?
- 在 Execute SQL Task 中的 Parameter Mapping 中 Direction 有哪几种类型?
- 如何配置 Execute SQL Task 的参数,在 Parameter Mapping 中 Parameter Name 的作用是什么?
- 在 Execute SQL Task 中调用带有 Output 参数的存储过程,在配置 Parameter Mapping 中,应该为此 Output 参数配置哪一种 Direction?
- 在 Execute SQL Task 中如何获取带有返回值的 Return Value 的存储过程?
- 如果要记录一个包的开始启动时间,执行结束时间已经包执行的唯一ID,以及包最终执行状态,应该使用到哪些系统变量,并如何实现这个基本的 Log记录?
- 在 Execute SQL Task 中 Result Set 有哪四种类型,举例说明每一种类型的 Result Set 的使用场景?
- 如何在变量中保存 Execute SQL Task 返回的 Full Result Set,应该使用哪一种变量类型来保存?
- 如何遍历访问 Execute SQL Task 中返回的 Full Result Set,有那两种基本的实现方式?
- 在哪些情况下会使用到父子包 Parent Package and Child Package,使用父子包设计的好处 ?
- 如果需要将 Parent Package 的参数传入 Child Package 需要打开 Package 的哪个配置选项?
- 在 SSIS ETL 2012 中对于 Package Configuration 第一次打开和第二次打开的位置有什么变化?
- 在 Package Configuration Wizard 中, Configuration Type 配置有那几种类型,配置父子包的时候应该选择哪一种?
- 如何将 Parent Package 中的值传入到 Child Package 包中的变量?
- 如何在 Parent Package 调用 Child Package,在控制流中使用到哪一个控件?
- 给包变量赋值有哪三个阶段?
- 如何在包运行之前给包中的变量赋值?
- 可以通过哪些控制流控件调用结束后通过返回值给一个变量赋值?
- 如何在包运行的过程中给一个变量赋值,可以使用到哪些控制流控件?
- 在控制流中 File System Task 可以对文件做哪些基本的操作?
- 在 Script Task 中如何获取指定目录下的所有文件名称,或者指定文件后缀类型的文件名称?
- 在 SSIS 2012 ETL 中,XML Task 有那六大操作类型 Operation Type ,这六种类型各自的作用分别是什么 ?
- XML Task 中,如何使用 Validate 操作来验证一个 XML 文件?
- XML Task 中,如何使用 XML 样式表对 XML 文件进行格式转换,XLST 文件的作用是什么?
- XML Task 中,如何使用 XPATH 查找和抽取 XML 文件中的内容,比如如何返回一个节点,或者节点集合,值等?
- XML Task 中,如何使用 Merge 操作来合并两个 XML 文件中的内容到第三个新的文件,或者将 XML 文件内容插入到另外一个 XML 文件指定的位置?
- XML Task 中,使用 Diff 操作比较两个 XML 文件,可以输出哪些内容? 这些内容分别描述的是什么?
- XML Task 中,使用 Patch 操作时一般需要哪几种 XML 文件来参与? 这几种 XML 文件的内容分别应该是什么?
- 请描述使用 Send Mail Task 的场景?
- 在使用 Send Mail Task 的时候有哪些限制,局限性?
- 在使用 Send Mail Task 需要建立哪种类型的连接?
- 使用 Send Mail Task 是否可以发送带附件的邮件类型?
- SSIS 中 Event Handler 的作用是什么? OnError 事件有什么样的作用,我们可以利用 OnError 处理哪些问题?
- 什么是变量的 Scope? 控制流控件中 Scope 下的变量和 OnError Scope 下的变量有哪些差别?
- 如果要访问非域中的非Windows 验证下的 SMTP 服务器并发送邮件,在 SSIS 2012 ETL 中我们还可以使用什么样的方式?
- 在控制流 Script Task 中,默认引用的命名空间中是否包含了对 Windows.Forms 的引用?
- 在控制流 Script Task 中,它的 Entry Point 是什么? 这个方法的作用是什么?
- 在控制流 Script Task 中,ReadOnlyVariables 和 ReadWriteVariables 分别是表示什么意思?
- 如何调试 Script Task 中的脚本,有哪两种基本的方式,调试的过程是什么?
- 在 SSIS 2012 ETL 中,Script Task 有哪一种 Bug 从 2008、2008R2 版本到 2012 版本一直都存在,这个 Bug 是什么?
- 在 SSIS 2012 ETL 项目中,对于参数的验证一般有哪些,为什么需要这些验证,所起到的作用是什么?
- 在你的项目中,对文件类的验证一般都有哪些,分别是什么,请描述一下验证的过程?
- 描述 SSIS 2012 ETL 控制流的 Execute Process Task 的作用,我们可以使用它来做哪些操作?
- 如何使用 Execute Process Task 来实现压缩和解压缩操作?
- For Loop Container 的作用是什么?它类似于编程语言中的哪一种语法,有哪三个基本的配置?
- 可以在 For Loop Container 中循环时间吗?如何实现?
- Foreach Loop Container 最常见的使用场景是什么? 如何使用 Foreach Loop Container 来循环和遍历在指定目录下同类型的文件?
- 描述一下你所知道的 Foreach Loop Container 中的迭代器 Enumerator,大概有哪几种?
- 在 Foreach Loop Container 中,Foreach File Enumerator 主要在什么时候使用?
- 在 Foreach Loop Container 中,Foreach ADO Enumerator 主要在什么时候使用? 它对循环的变量在类型上有什么特别要求?
- 在 Foreach Loop Container 中,Foreach From Variable Enumerator 主要在什么时候使用?对循环的变量在类型上有什么要求,请举例说明使用的场景?
- 在 Foreach Loop Container 中,使用 Foreach ADO.NET Schema Rowset Enumerator 可以解决什么样的问题? 请举例说明。
- Precedence Constraint 优先约束是什么? 它是在控制流中还是数据流中使用?它的作用是什么?
- Precedence Constraint 优先约束中约束有哪两种选项,作用分别是什么?
- Precedence Constraint 中,Constraint 约束有哪几种值,作用分别是什么?
- Precedence Constraint 中,Expression 表达式约束是如何使用的?
- Precedence Constraint 中,请描述一下在多约束的情况下,Logical AND 和 Logical OR 是如何使用的?
- 使用 SQL Profilling Task 数据探测的作用是什么? 可以帮助我们了解到什么样的信息?
- 使用 SQL Profilling Task 对数据源连接有什么样的限制?
- 使用 SQL Profilling Task,对于数据探测的结果通常是以什么形式来保存的?
- 对于 SQL Profilling Task 的输出结果,应该使用 SQL Server 2012 中的哪种工具来进行查看?
- SQL Profilling Task 中,Null Ratio Profile (NULL 比例统计) 的作用是什么,可以通过它检测到哪些信息?
- SQL Profilling Task 中,Column Length Distribution Profiles (列长度分布统计数据) 的作用是什么,它包含哪些基本信息?
- SQL Profilling Task 中,Statistics Profiles (列统计信息) 的作用是什么,它包含哪些基本信息?
- SQL Profilling Task 中,Value Distribution (列值分布统计) 的作用是什么,它包含哪些基本信息?
- SQL Profilling Task 中,Pattern Profiles (列模式,正则表达式分配统计) 的作用是什么,它包含哪些基本信息?
- SQL Profilling Task 中,Candidate Key Profile (候选主键探查) 的作用是什么,它包含哪些基本信息?
- SQL Profilling Task 中,Functional Dependency Strength Profile (函数依赖关系统计) 的作用是什么,它包含哪些基本信息?
- SQL Profilling Task 中,Value Inclusion Profile (值包含统计) 的作用是什么,它包含哪些基本信息?
- 在使用 Bulk Insert 控件时,是否可以对长度类型进行控制,包括类型转换?
- 在分别使用 Bulk Insert 控件,SSIS Data Flow Fast Load,SQL Bulk Insert 语句插入数据的效率表现是怎么样的?
- 请描述一下 Conditional Split 的使用方法和使用场景? 它可以写表达式吗? 它可以访问到上游数据的列,变量,以及使用函数吗?
- 请描述一下 Data Conversion 与 Derived Column 的使用方法,以及它们之间的区别是什么?
- 请描述一下 Multicast 多播的使用方法和使用场景? 请举例说明。
- 请描述一下 Aggregate 聚合控制的使用方法,为什么我们要尽量避免在数据流 Data Flow 中使用 Aggregate 控件,在什么情况下可能避免不了要使用它?
- 你是如何理解 Synchronous 同步,Asynchronous 异步,Blocking 阻塞这几个概念的?
- 请描述一下 Lookup 控件的基本使用方式,它可以解决什么问题?
- 在 Lookup 中什么是输入源,引用数据集,缓存的数据是哪一部分的数据?
- Lookup 有那两种连接方式,分别是什么?
- Lookup 中 OLE DB Connection 连接模式下有哪几种缓存模式?分别是什么?
- Lookup 中字符串对比的时候,在默认 Full Cache 条件下会出现 CASE SENSITIVE 的问题,如何设计或者配置能让字符串比较不区分大小写?
- Lookup 中 OLE DB Connection 连接模式下 Full Cache 完全缓存模式下数据完全缓存在什么地方,它的缓存过程是什么?
- Lookup 中 OLE DB Connection 连接模式下 Partial Cache 部分缓存中的匹配缓存区和不匹配缓存区分别指什么?
- Lookup 中 OLE DB Connection 连接模式下 No Cache 的工作机制是什么?
- 什么是运行时缓存,Cache Transform 缓存转换控件中运行时缓存是如何实现的,请描述使用的过程?
- 什么是文件缓存,Cache Transform 缓存转换控件中的文件缓存是如何实现的,情描述使用的过程?
- Cache Transform 中的运行时缓存和文件缓存在使用的时候有什么区别,对同包和不同的包调用缓存时有什么样的使用要求?
- 请描述 Merge 合并转换控件的使用方式,它对输入的数据源有什么要求与限制?
- 尽管在 OLE DB Source 查询时使用了排序的 SQL 语句,但是仍然在关联到 Merge 控件的时候出现错误,通常是什么原因,应该如何解决?
- 请描述 Sort 排序转换控件的使用方式,如何理解它的 Asynchronous 异步和 Blocking 阻塞特性?
- Merge Join 转换控件的特点是什么?它有哪几种 Join 的方式,如何使用?请描述各种 Join 方式的使用过程。
- Union All 转换控件的使用和 Merge,Merge Join 转换控件的使用有什么不同? 它们三者直接的异同点是什么?
- 如果需要在数据流 Data Flow 中记录从源插入的目标的条数,可以有什么样的实现方法?
- 请描述一下 Row Count 转换控件的使用,如何记录数据流 Data Flow 中条数并赋值给一个变量,且插入到日志中?
- 如何在 SQL 以及 SSIS 中实现 PIVOT 操作?
- 在 SSIS 2012 ETL 中,PIVOT 转换控件中的 Pivot Key, Set Key, Pivot Value 分别是指什么?
- 在 SSIS 2012 ETL 中,如何通过 PIVOT 控件自动生成转换的列 Pivoted Output Columns?需要通过什么样的设置?
- 如何在 SQL 以及 SSIS 中实现 UNPIVOT 操作? 在使用 UNPIVOT 的过程中,能不能从聚合数据还原到 PIVOT 之前的细节数据?
- 在 SSIS 2012 ETL 中,UNPIVOT 转换控件中的 Input Column, Destination Column 以及 Pivot Key value column name 分别指的是什么?
- 在数据流 Data Flow 中,Script Component 大概能够使用到的场景有哪些? 它有哪几种转换类型?
- 在数据流 Data Flow 中,Script Component与控制流 Control Flow 中的 Script Task 有哪些不同?
- 请分别说明 Script Component 中默认的类型下 PreExecute(), PostExecute(), InputXXX_ProcessInputRow() 方法各自的作用是什么?
- Script Component 中 InputXXX_ProcessInputRow(Input0Buffer Row) 参数 Row 的生命周期是什么,它表示什么?
- 如何使用 Script Component 来实现数据流 Data Flow 中从源到目标的行计数?
- 如何使用 Script Component(Source 类型)来访问并遍历一个平面文件的每一行?
- 如何在 Script Component (Source 类型)创建一个或者多个 Output 输出?
- 描述一下在 Script Component (Source 类型) 中的 Script 中创建输出流的过程,即 CreateNewOutputRows() 方法的使用。
- 如何在 Script Component (Source 类型)中的 Script 访问输出 Buffer,如何添加一个新的 Output 行往下输出?
- 什么是 Script Component 同步 Transformation?应该如何设置?
- Script Component (Transformation 类型) 中的 Output 中 SynchronousInputID 的作用是什么? 如果值是 None 或者 0 表示是什么意思?
- Script Component (Transformation 类型) 中的 InputXXX_ProcessInputRow(Input0Buffer Row) 方法中,Row 包含了那两部分的内容?
- 在数据流 Data Flow 转换组件中,如何判断这个转换组件是一个同步 Synchronous 的还是一个异步 Asynchronous 转换组件?有哪些基本的判断方法?
- 如果需要将 Script Component (Transformation 类型) 由同步 Synchronous 变为异步 Asynchronous 需要做哪些设置?
- 在 Script Component (Transformation - 类型 - 异步) 中,如果有多个输出,同步转换和异步转换是否可以共存?
- 在 Script Component (Transformation - 类型 - 异步) 中,InputXXX_ProcessInput() 方法和 InputXXX_ProcessInputRow() 方法的区别是什么?
- 在 Script Component (Transformation - 类型 - 异步) 中,InputXXX_ProcessInput(Input0Buffer Buffer) 方法中的 Buffer 参数应该如何理解? 它包含的数据应该是什么?
- 为什么说 Script Component (Transformation - 同步) 是一个 Non-Blocking 无阻塞转换,而(Transformation - 异步)是一个 Semi-Blocking 半阻塞转换?
- 如果我们在 Script Component 中脚本中同时看到这两个方法 InputXXX_ProcessInput() 和 InputXXX_ProcessInputRow(),我们对 Script Component 的配置可能采取哪些方式? 它们要表达的转换形式可能是什么?
- 描述一下在你所经历过的项目或者练习中对 Script Component(Destination - 类型) 的使用是如何进行的?
- 如何在 Script Component 中访问连接数据库中的数据表?需要采用 OLE DB 连接方式还是 ADO.NET 连接方式?
- 请描述一下在 Script Component 中访问连接数据库并向指定数据表插入数据的过程,所需要涉及到的 SQL 对象有哪些?
- 请大致描述一下在 Script Component 组件的四种转换操作中(Source, 同步 Transformation,异步 Transformation,Destination)通常哪一种或者哪两种转换方式效率要高一些,哪一种或者哪几种转换方式效率要低一些,请大致分析一下原因。
- 结合数据流中的这些组件 Data Conversion, Derived Column, Aggregate,Sort,Script Component 描述一下你是如何理解阻塞,半阻塞,完全阻塞,同步,异步这些概念的? 以及描述一下你所了解的控件哪些是属于阻塞,半阻塞,完全阻塞,同步,异步类型的?
- 在数据流中 OLE DB Command 组件与控制流中的 Execute SQL Task 有哪些异同点?
- 在数据流中 OLE DB Command 组件与 OLD DB Destination 有哪些异同点?
- 在 OLE DB Command 中使用普通的带参数的 SQL 语句与带参数的 Stored Procedure 有什么样的细微差别?
- 虽然说 OLE DB Command 是一个同步转换组件,但为什么还是要说它是一个 Performance Killer 性能杀手,它的执行特点是什么?
- 同步转换组件的效率是否一定要比异步转换组件的效率要高,如果不一定的话可以举出两个例子来说明。
- 在一些使用场景下,可以通过什么样的方式来实现替换 OLE DB Command 的使用,以达到提升效率的目标?
- 描述一下什么是 Slowly Changing Dimension 缓慢渐变维度,在什么场景下我们需要使用到这个概念来解决一些实际问题?
- 描述一下你所了解的解决缓慢渐变维度的一些设计方式和方法?
- 什么是 Business Key 业务主键,什么是 Surrogate Key 代理主键? 使用 Surrogate Key 可以解决什么样的问题,有什么样的好处?
- 在 SSIS 中可以通过哪种控件来实现 SCD,描述一下其实现的步骤,包括在 SSIS 2012 ETL 中 SCD 提到的三种 SCD Type 有哪些?
- 描述一下在 SSIS 2012 ETL 中的 SCD 数据流执行的过程,SCD Type 1 和 SCD Type 2 的逻辑实现过程?
- 除了 SSIS 2012 ETL 自带的 SCD 转换控件以外,还可以通过哪些方式来实现 SCD?
- 在微软 SSIS 2012 ETL 中,对于 SCD Type 2 的可以通过起始时间的设置,或者状态的设置二选一来实现标识当前维度和维护历史维度行,如何设计让这两者并存出现在维度表中?
- 请大致说下对于增量数据的加载有哪些实现方式? 比如对有时间戳的原始数据和没有时间戳的原始数据增量加载可以如何设计和实现?
- 请描述一下 Check Point 的使用场景以它的实现过程和基本的配置。
- 如何设计一个 ETL 来监控某指定数据库,比如数据仓库各表的大小,行数每天的变化情况? 并根据这些变化情况大致了解每天的增长量,对以后增长趋势的预测?
- 如何设计一个 ETL 监控或者同步指定目录下各中文件,或指定后缀文件的大小变化,及相关属性变化等信息,比如数据库文件大小变化的监控?
可按对应案例(案例XXX)查找自测和面试题
- 001_从数据库导出数据到平面文件 (1-7)
- 002_平面文件输出格式的区别 (8-14)
- 003_从平面文件导入数据到数据库之一 (15-19)
- 004_从平面文件导入数据到数据库之二 (15-19)
- 005_平面文件空值处理 (20-29)
- 006_不规则的平面文件输出技巧 (30-31)
- 007_Error Output 错误输出 (32-39)
- 008_Error Output 错误捕获 (40-43)
- 009_两种输出 XML 文件的方式 (44-51)
- 010_XML 文件的加载导入 (52-53)
- 011_CSV 文件的导入与导出 (54-57)
- 012_EXCEL2013 文件的导入与导出 (58-62)
控制流控件类 - 14
- 013_Execute SQL Task 与输入输出返回值 (63-71)
- 014_Execute Package Task 父子包与参数传递 (72-77)
- 015_Expression Task 与变量赋值的三个阶段 (78-81)
- 016_使用File System Task 中处理文件和目录 (82-83)
- 017_XML Task 之文件验证与样式转换 (85-86)
- 018_XML Task 之XPATH抽取与MERGE合并 (87-88)
- 019_XML Task 之 Diff 与 Patch 互逆操作 (89-90)
- 020_使用 Send Mail Task 监控包错误并发送邮件 (91-97)
- 021_Script Task 中读写变量的操作与断点调试 (98-102)
- 022_Script Task 中的文件参数验证 (103-104)
- 023_使用 Execute Process Task 压缩与解压缩文件 (105-106)
- 024_For Loop 时间与 Foreach Loop 文件加载 (107-114)
- 关于 Foreach ADO Enumerator
- 关于 Foreach ADO.NET Schema Rowset Enumberator
- 关于 Foreach From Variable Enumerator
- 025_Precedence Constraint 优先约束详解 (115-119)
- 026_使用 SQL Profilling Task 进行数据探测 (120-131)
- 027_BCP Bulk Insert Data Flow Bulk Insert 四种文件导入方式 (132-133)
数据流控件类 - 22
- 028_使用 Conditional Split 条件拆分 (134)
- 029_Data Conversion 与 Derived Column 之比较 (135)
- 030_使用 MultiCast 多播输出到多个目标 (136)
- 031_使用 Aggregate 聚合输出(同步异步与阻塞) (137-138)
- 032_初步使用 Lookup 查找转换 (139-142)
- 033_Lookup 的 OLE DB 缓存 Full Cache Partial Cache 和 No Cache (143-147)
- 034_Lookup 与 Cache Transform 运行时缓存共享 (147)
- 035_Lookup 与 Cache Transform 文件缓存共享 (148-149)
- 036_Merge 合并与 Sort 排序(异步与阻塞) (150-152)
- 037_Merge Join 的特点 (153)
- 038_Union All 的使用与 Merge Merge Join 之比较 (154)
- 039_使用 Row Count 记录从数据源写入目标表的条数 (155-156)
- 040_在 SQL 和 SSIS 中使用 PIVOT 进行行列转换 (157-159)
- 041_在 SQL 和 SSIS 中使用 UNPIVOT 转换操作 (160-161)
- 042 _初步使用 Script Component 记录数据流行数 (162-166)
- 043_使用 Script Component Source 解析不规则文件 (167-170)
- 044_使用 Script Component 同步 Transformation 解析不规则文件 (171-174)
- 045_使用 Script Component Transformation 异步转换不规则文件 (175-180)
- 046_使用 Script Component Destination 和 ADO.NET 解析不规则文件(一) (181-185)
- 046_使用 Script Component Destination 和 ADO.NET 解析不规则文件(二) (181-185)
- 047_OLE DB Command 性能杀手 (186-191)
- 048_数据仓库 Slowly Changing Dimension 缓慢渐变维度 (192-194)
- 049_Slowly Changing Dimension 的实现 (195-198)
- 案例作业及其它(199-202)