python pandas sqlserver_python学好了还可以用到SSIS上,将Python的能力嫁接到SSIS中
前一篇推文中,給大家演示了在SSIS上使用dotNET腳本,實(shí)現(xiàn)一些原生SSIS難以實(shí)現(xiàn)的功能,并冠以無限可能的說法。
對(duì)部分非dotNET的人群來說,難以發(fā)揮到自身的知識(shí)儲(chǔ)備能力,此篇鄭重地為大家宣布,所有大家過去的知識(shí),都能為SSIS所用。
此篇演示python腳本幫助數(shù)據(jù)清洗工作,成為SSIS流程中的一部分,同理其他語言其他工具亦可以完成,只要有最終輸出即可供SSIS使用。
充分復(fù)用python的現(xiàn)有優(yōu)勢(shì)
python的確是一門非常優(yōu)秀的編程語言,特別是在數(shù)據(jù)領(lǐng)域,網(wǎng)絡(luò)爬蟲、數(shù)據(jù)處理、分析等方面都是非常強(qiáng)勁。
估計(jì)現(xiàn)在許多做數(shù)據(jù)的朋友們,或多或少也會(huì)學(xué)習(xí)一下python,學(xué)深一門語言花費(fèi)大,入門一門語言是容易的。
特別是已經(jīng)掌握了一門現(xiàn)有語言的基礎(chǔ)上,再學(xué)一門新語言,也是不難,熟悉語法、現(xiàn)有類庫(kù)、包調(diào)用即可。
筆者因喜歡使用現(xiàn)成的微軟的工具,在微軟的生態(tài)里專研得深,產(chǎn)品間的交叉應(yīng)用場(chǎng)景廣,所以學(xué)習(xí)dotNET是非常不錯(cuò)的投資回報(bào)。
若其他朋友的學(xué)習(xí)路徑是python為主,本文可以給python群體一個(gè)大大的精喜,在python上做好它最擅長(zhǎng)的部分,其余流程交給SSIS現(xiàn)有成熟、簡(jiǎn)單易用的數(shù)據(jù)ETL框架來完成,雙重優(yōu)勢(shì)發(fā)揮得淋漓盡致。
演示內(nèi)容介紹
本文打算使用python進(jìn)行數(shù)據(jù)的清洗部分,引用的案例是帶筆者入門dotNET的我的師傅的出品案例:清洗一份課程表數(shù)據(jù),將其轉(zhuǎn)換為結(jié)構(gòu)化的一維表結(jié)構(gòu)。
我?guī)煾稻╠otNET、python等語言,專業(yè)程序員,寫得代碼很規(guī)范,很值得學(xué)習(xí)和關(guān)注。
詳細(xì)文章出處:
https://mp.weixin.qq.com/s/EK63nax5JCur-G2o2QMJNw
數(shù)據(jù)源結(jié)構(gòu)為:
最終轉(zhuǎn)換的結(jié)果:
使用原理介紹
本次使用的是SSIS可以調(diào)用處部程序的功能,調(diào)用CMD,然后輸入?yún)?shù)為 python main.py,啟用python并運(yùn)行main.py這個(gè)文件。
以上的前提條件是本機(jī)安裝好python,并設(shè)置好環(huán)境變量讓CMD可以直接通過敲打python即可啟動(dòng)python程序,根據(jù)不同腳本的要求,安裝好相應(yīng)的包,例如本篇是使用pandas作數(shù)據(jù)清洗,在python中需要安裝好pandas包。
從實(shí)例數(shù)據(jù).xlsx中,經(jīng)過python腳本的運(yùn)行,生成一個(gè)res.csv的文件。
在SSIS上使用python腳本
在控制流任務(wù)中,有【執(zhí)行進(jìn)程任務(wù)】,拉一個(gè)任務(wù)到右側(cè),并雙擊此任務(wù)進(jìn)行詳細(xì)配置。
在【處理】選項(xiàng)卡中,放入【Executable】參數(shù)為CMD路徑,若運(yùn)行其他程序同理。
在【Arguments】參數(shù)中,輸入CMD調(diào)用的參數(shù),此處輸入絕對(duì)路徑,并且在CMD參數(shù)中加上/C開關(guān),表示運(yùn)行完關(guān)閉CMD程序。
在python的路徑識(shí)別中,需要轉(zhuǎn)換為反斜杠,如:python F:/自媒體相關(guān)/其他文章分享/數(shù)據(jù)ETL/main.py
運(yùn)行后關(guān)閉程序很關(guān)鍵,若自己寫出的程序,想直接在【Executable】里運(yùn)行,最后一步需要將程序自關(guān)閉,例如使用dotNET寫一些控制臺(tái)程序。否則最好用CMD來運(yùn)行所需的程序,再加上/C開關(guān)關(guān)閉它,讓SSIS任務(wù)流可以流到下一個(gè)任務(wù)。
創(chuàng)建好任務(wù)后,可以單獨(dú)執(zhí)行一個(gè)任務(wù),測(cè)試最終效果。
此處給大家演示下控制流任務(wù),可以將我們?nèi)粘TS多編程代碼的任務(wù),轉(zhuǎn)換為控件拖拉的方式,例設(shè)上面py腳本未做防錯(cuò)處理,當(dāng)已經(jīng)有res.csv文件存在時(shí),再生成res.csv會(huì)報(bào)錯(cuò)。此處使用SSIS的【文件系統(tǒng)任務(wù)】來完成文件先刪除操作。
接下來,我們回到常規(guī)任務(wù),將新生成的res.csv文件進(jìn)行數(shù)據(jù)抽取并加載到數(shù)據(jù)庫(kù)中。
本篇的文件為csv文件,使用【平面文件源】來讀取,具體配置自行琢磨下,比【Excel源】要復(fù)雜一些,但因其非常常用,很有必要熟悉掌握。
目標(biāo)我們存到關(guān)系數(shù)據(jù)庫(kù)中,這樣數(shù)據(jù)的二次利用才更方便,并且數(shù)據(jù)庫(kù)的存儲(chǔ)數(shù)據(jù)量也可以得到保障。
最終我們的數(shù)據(jù)流任務(wù)如下圖,增加加載時(shí)間,方便后期審核。
最終我們的控制流任務(wù)如下,完成我們預(yù)期的效果,將python清洗好的數(shù)據(jù),交給SSIS的后續(xù)步驟來調(diào)用。
在SSMS上打開目標(biāo)表,發(fā)現(xiàn)數(shù)據(jù)已經(jīng)加載成功。
為何不使用一步到位直接python完成或SSIS完成?
在python的群體中,的確熟練使用后,將數(shù)據(jù)再作一步,直接上傳到數(shù)據(jù)庫(kù)中,也并非難事。
但對(duì)于一個(gè)工具型的做事方式來說,為何有現(xiàn)成的工具不用,而轉(zhuǎn)而自己從零開始寫代碼完成,況且自己寫出來的代碼,也不會(huì)像專業(yè)工具考慮得那么周到完善,例如數(shù)據(jù)上載過程中報(bào)錯(cuò)怎樣處理?數(shù)據(jù)上載的性能怎樣保證等等,沒有足夠的專業(yè)度是寫不出很健壯的代碼。
所以若我們可以充分利用好各個(gè)工具的最大的優(yōu)勢(shì)部分,組合起來使用,每個(gè)工具也無需學(xué)習(xí)太深入,即可完成手頭的任務(wù),何樂而不為。
同樣的道理,如果用SSIS直接來處理臟亂的數(shù)據(jù)源,也是一個(gè)很痛苦的過程,在dotNET腳本中處理,也沒有python現(xiàn)成的pandas這些專業(yè)庫(kù)的數(shù)據(jù)清洗來得方便。
結(jié)語
本篇給大家再次開闊思路,使用現(xiàn)成的SSIS的ETL框架性功能,外加一些其他現(xiàn)成的好用的數(shù)據(jù)處理工具,強(qiáng)強(qiáng)聯(lián)合,使我們的數(shù)據(jù)ETL過程更加容易,也有更大的能力處理更多的復(fù)雜場(chǎng)景。
在下一篇中,我們重新回到微軟系中,使用SSIS和PowerQuery聯(lián)合,將輕量化的ETL工具一些好用易用的能力同樣嫁接到SSIS中,同時(shí)又可以避開此短板部分。敬請(qǐng)關(guān)注。
筆者未來聚焦在數(shù)據(jù)領(lǐng)域的分享,不限于Excel,會(huì)分享更多Sqlserver、dotNET、Azure、PowerBI等話題,升級(jí)數(shù)據(jù)分析的能力,歡迎繼續(xù)關(guān)注。*
總結(jié)
以上是生活随笔為你收集整理的python pandas sqlserver_python学好了还可以用到SSIS上,将Python的能力嫁接到SSIS中的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用什么来代替switch_一根转动的圆筒
- 下一篇: httpsendrequest的head