SQL Server 2017 除了內建 Machine Learning的資料庫亮點,在Auto tuning或是其他方面其實也有很多值得推薦的地方,本篇將會側重在 SSIS這個強大的資料轉換工具上。
A. 在談資料轉換作業之前,我們要先了解為何要做資料轉換以及適合哪些應用情境?
1. 約莫在2000年時商業智慧BI(Business Intelligence)搭著電子商務dot com的浪潮高速地發展,透過ETL(Extract/ Transform/ load)工具將各種不同的異質資料轉換至OLAP(Online Analytical Processing),進而將客戶的行為、產品之間的搭配、熱賣商品…組合而成的各項企業KPI,以企業戰情室的儀表板Dash board方式來呈現是當時的顯學。另外除了MOLAP(multi-dimension olap) / ROLAP(relational olap) / HOLAP(hybrid olap) 三種技術架構各自有各自的擁載者
2. 接著隨著B2B的盛行,企業除了在面對內部不同部門之間的資料交換需求,同時也需要面對外部上下游間的資料交換,所以EDI (Electronic data interchange)電子數據交換就是基礎於X12、EDIFACT、XML(RosettaNet、ebXML)、SPEC2000(航空業)…等格式,透過HTTP/HTTPS、SOAP、X400、POP3/SMTP、FTP…等通訊協定的解決方案。除了SSIS這類的ETL工具,微軟的Biztalk Server更是BPM(Business Process Management)這種更大範圍資訊整合議題的好工具。
3. 隨著Yahoo/Google/FB這種世界等級的入口網站、搜尋引擎、社群網路…等應用的不斷地出現,圖片、影音…大量的非結構化資料,除了讓資料量推升至TB等級的規模,也不斷地墊高關聯式資料庫的成本與更高規格的硬體。基礎於關聯式資料庫是擅長於Scale up在處理交易行為且結構式資料的前題,所以像NoSQL、Hadoop這類擅長於Scale out在處理非結構化資料的解決方案,伴隨Lambda architecture framework開始成長茁壯。至於Lambda architecture是什麼?這是一種可以同時兼具批次(Batch)與串流(Streaming-processing)資料處理的方法論。串流最早是在 SQL2012的企業版開始提供 StreamInsight 這樣的技術,細節請參考官網的說明,這個解決方案主要是針對 CEP(complex event processing)複雜事件處理類型的應用場景,特別適用於高輸送量、低度延遲之事件資料流處理的需求。其事件資料流來源可以包含來自製造業的應用程式、金融保險業的財務交易應用程式以及大型網站的Web 分析或是對時效性要求很高的操作分析的資料…
4. 緊接著公有雲與大量開源的記憶體運算解決方案的興起,Data Lake則是基礎於Lambda architecture並且應用前述的公有雲與記憶體運算,來達成更高理想的資料處理方法論,又可以拆分為儲存與運算二個區塊。以儲存來看,可以包含關聯式資料(rows與columns…)、半結構化資料(CSV、logs、XML、JSON…)、非結構化資料(Emails、Documents、PDFs…)。它的概念跟傳統企業編列預算在解決需求單位的儲存問題是很大的不同,它可以將重要且馬上要 time to market 的資料先儲存在高價的公有雲SSD premium storage,並且應用記憶體運算的高效解決方案來處理。至於,有價值但現在還沒想到怎麼應用的資料(例如客戶在電子商務網站上面的瀏覽行為或是其他有具潛力且未來價值性極高的資料來源),也都可以先儲存在低價的公有雲Cold data storage,等到將來規劃好再來分析應用。
B. 至於什麼是SSIS?這個是SQL Server中除了關聯式資料庫引擎之外,內建專門處理傳統地且功能強大的一個ETL工具。為了符合企業等級的資料轉換目標,SSIS具備有自己的User database,並且藉由SQL Agent service得以實現可排程的自動化作業。SSDT是其前端工具,除了提供了拖拉點選GUI的便利,其可擴充(Azure feature pack)的功能,也讓混合雲的變得更容易被實現。
因此,基礎於上述多種不同的情境的傳統型資料轉換需求,在微軟的豐富地產品線中,面對不同的情境,是有機會選擇以Windows + SQL2017 SSIS、Linux + SQL2017 SSIS、Azure data factory(version 2 Integration Runtime) 三種解決方案來去應對的。
關於什麼是雲端的Azure Data Factory?你可以參考以下架構圖,並簡易的理解成,一種在雲端的SSIS package的概念,在雲端建置後你可以透過SSMS或是SSDT連上它並編輯與佈署你的資料轉換流程。
下圖是SSMS的畫面,不管是雲端還是地端的SQL Server都可以連上ADFv2的IR
下圖是SSDT新增一個ADF專案的畫面
有分成Version1與Version2,起初只有純雲端的解決方案,一直到Version2才發展出Integration Runtime的混合雲解決方案。使用時機,就是當你想在地端的SQL Server中已既有的管理習慣,去佈署與管理雲端的資料轉換工作,當然Azure Data Factory在Azure portal是有提供豐富且視覺化的管理界面,只是你想在同一個界面上集中管理雲與地的資料轉換。
由於SQL2008將於2019/7/9終止support,所以我就花一點時間,幫各位比較SSIS的演進,以利當我們在評估不同版本的 SQL Server 升級或是直接重新建置新版本時,才能有更清楚的思路。
1. SQL 2000 DTS(Data Transformation Services),是當時大家都很期待的ETL工具,可惜受限於32bit OS的作業系統定址上限為4GB,但其實AP能用到的部份其實還更少,只有2GB。在這麼有限的記憶體下工作,只有資料量一大,都會東卡西卡。
2. SQL 2005 SSIS(SQL Server Integration Service),全新的名稱在一樣32bit OS環境,並不是新瓶裝舊酒而已。換句話說,雖然作業系統記憶體定址的上限還是存在,但是SQL 2005這一個版本其實是轍頭轍尾的大改版。早在SQL 2000時就向Sybase買斷了Source code,所以選在SQL 2005正式斷奶,然而不靠外界的幫忙想要獨立長大真的不是件容易的事,除了所需克服的技術挑戰,還有產品定位以及發展方向要處理,也因此上市的時間,與表定2004要上市的時程還多Delay了一年。至於它要如何與前一版的DTS做差異化?基礎於微軟有地表上最強大的開發工具Visual Studio,所以SSIS只需設計成一個底層的服務,而前端的SSDT(SQL Server Data Tools)則是透過Visual Studio為底,再搭載開發OLTP與OLAP所需的功能套件。在這個版本中,SSDT將開發工具可模組化、可參數化、可物件導向化、可逐步偵錯、可版本控管、可擴充…等特性,全部實現在這個微軟新一代的ETL工具中。
至於SSIS如何向下相容DTS的問題,是可以透過一支名為DTEXEC的程式,去執行舊版本的package檔案。當然微軟只是希望幫大家爭取時間,讓大家可以趕快學習新的版本,重新以更好的架構來改寫舊版的package。
3. SQL 2008 R2 SSIS(SQL Server Integration Service)在這個版本中,有幸可以應用到64bit新架構,輕易地突破AP只能用到2GB的限制,以往資料量一大就卡卡的窘境終於得以改善。
4. SQL 2012 SSIS(SQL Server Integration Service)在這個版本中,除了解決了上一個版本不能用T-SQL呼叫Package,導致排程工作不能用SQL Server的agent service而是用作業系統的Task Scheduler的現象。另外還加入Project deployment的專案佈署功能,讓一支一支的孤單Package可以整合在一個較大的專案範疇中。
在身份驗證上,這個版本基於安全考量僅支援Windows身份驗證,但卻也失去了使用上的彈性。
另外在這個版本的後期,可以透過Service Pack更新,擴充至存取雲端Azure的功能
5. SQL 2014 SSIS(SQL Server Integration Service)在這個版本中,除了在身份驗證也加入SQL Account的身份驗證(混合模式)來支援專案所需的彈性;也在記憶體的配置上增加了自動最佳化(AutoAdjustBufferSize 屬性預設值為True)的功能。另外其SSIS DB也開始支援AlwaysOn做HA,讓資料轉換作業變得更加強健與可靠。
6. SQL 2016 SSIS(SQL Server Integration Service)在這個版本中,增強了Incremental Package Deployment的佈署管理功能,來解決不用因為少量的程式異動,就進行全面性的重新佈署,費時費力。
7. SQL 2017 SSIS(SQL Server Integration Service)在這個版本中就厲害了,可以將Package分散至多台伺服器做分散式運算,甚至已經可以運行在Linux上面。為此也一併解決了多SQL版本相容性的問題,在純Windows環境,你要嘛就將Package升級至某個較高的SQL相容性版本,要嘛就準備多個不同版本的SSIS在運行不同時期開發出來的Package,但是這個相對不利於Linux的用戶。所以在SQL 2017 SSIS這個版本中,你是可以任意指定SQL相容性的版本直接運行,不需要在做一統天下版本這件事情了。
於Azure Feature Pack的更新,則是增加了Azure Data Lake相關(Data source/destination、Connect manager、File system task、Foreach Enumerator迴圈處理…等功能)支援
C.最後,我們要介紹SSIS Scale out這個全新的架構,可以如何來加速資料轉換的作業?我們參考下面的架構圖,可以發現透過master/workers多台伺服器所組成的cluster叢集(不管是雲端VM還是地端的實體機)。將以往大量批次待處理工作queue在單一SSIS伺服器的瓶頸現象,透過全新的架構分散且平行的運算,有效地提升資料轉換的效能。
微軟是如何保障客戶企業等級的資訊安全的?master/workers之間是基礎於一個名為SSIS master 14.0或SSIS workers 14.0的Windows常駐服務,跑在SSL(Security Socket Layer)較高安全的通訊協定,再透過CA憑證、通訊埠(預設值)8391 port、UID(32碼的unique ID)來實作資料傳輸。除此之外,還需要將防火牆的policy連同1433(SQL server通訊)、445(Remote Service Management)設定好,以實現完整的管理架構。
下圖是Windows常駐服務
下圖是CA憑證 下圖是UID
下是在Master節點中,運行多個Package的畫面
個人心得:雖然我們還不能精準地指定,哪些 Package 由哪些 Worker執行,但是全新的 SSIS dashboard,已經可以讓我們從 master 節點掌握自動化流程大多數的結果與錯誤訊息,除錯的速度也比以往還快。
李秉錡 Christian Lee
Once worked at Microsoft Taiwan