開篇介紹
微軟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)