「数据ETL」从数据民工到数据白领蜕变之旅(六)-将Python的能力嫁接到SSIS中...
前一篇推文中,給大家演示了在SSIS上使用dotNET腳本,實現(xiàn)一些原生SSIS難以實現(xiàn)的功能,并冠以無限可能的說法。
充分復(fù)用python的現(xiàn)有優(yōu)勢
python的確是一門非常優(yōu)秀的編程語言,特別是在數(shù)據(jù)領(lǐng)域,網(wǎng)絡(luò)爬蟲、數(shù)據(jù)處理、分析等方面都是非常強勁。
估計現(xiàn)在許多做數(shù)據(jù)的朋友們,或多或少也會學(xué)習(xí)一下python,學(xué)深一門語言花費大,入門一門語言是容易的。
特別是已經(jīng)掌握了一門現(xiàn)有語言的基礎(chǔ)上,再學(xué)一門新語言,也是不難,熟悉語法、現(xiàn)有類庫、包調(diào)用即可。
筆者因喜歡使用現(xiàn)成的微軟的工具,在微軟的生態(tài)里專研得深,產(chǎn)品間的交叉應(yīng)用場景廣,所以學(xué)習(xí)dotNET是非常不錯的投資回報。
若其他朋友的學(xué)習(xí)路徑是python為主,本文可以給python群體一個大大的精喜,在python上做好它最擅長的部分,其余流程交給SSIS現(xiàn)有成熟、簡單易用的數(shù)據(jù)ETL框架來完成,雙重優(yōu)勢發(fā)揮得淋漓盡致。
演示內(nèi)容介紹
本文打算使用python進行數(shù)據(jù)的清洗部分,引用的案例是帶筆者入門dotNET的我的師傅的出品案例:清洗一份課程表數(shù)據(jù),將其轉(zhuǎn)換為結(jié)構(gòu)化的一維表結(jié)構(gòu)。
我?guī)煾稻╠otNET、python等語言,專業(yè)程序員,寫得代碼很規(guī)范,很值得學(xué)習(xí)和關(guān)注。
詳細文章出處:
"Python替代Excel Vba"系列(三):pandas處理不規(guī)范數(shù)據(jù)
數(shù)據(jù)源結(jié)構(gòu)為:
最終轉(zhuǎn)換的結(jié)果:
使用原理介紹
本次使用的是SSIS可以調(diào)用處部程序的功能,調(diào)用CMD,然后輸入?yún)?shù)為 python main.py,啟用python并運行main.py這個文件。
以上的前提條件是本機安裝好python,并設(shè)置好環(huán)境變量讓CMD可以直接通過敲打python即可啟動python程序,根據(jù)不同腳本的要求,安裝好相應(yīng)的包,例如本篇是使用pandas作數(shù)據(jù)清洗,在python中需要安裝好pandas包。
從實例數(shù)據(jù).xlsx中,經(jīng)過python腳本的運行,生成一個res.csv的文件。
在SSIS上使用python腳本
在控制流任務(wù)中,有【執(zhí)行進程任務(wù)】,拉一個任務(wù)到右側(cè),并雙擊此任務(wù)進行詳細配置。
在【處理】選項卡中,放入【Executable】參數(shù)為CMD路徑,若運行其他程序同理。
在【Arguments】參數(shù)中,輸入CMD調(diào)用的參數(shù),此處輸入絕對路徑,并且在CMD參數(shù)中加上/C開關(guān),表示運行完關(guān)閉CMD程序。
在python的路徑識別中,需要轉(zhuǎn)換為反斜杠,如:python F:/自媒體相關(guān)/其他文章分享/數(shù)據(jù)ETL/main.py
運行后關(guān)閉程序很關(guān)鍵,若自己寫出的程序,想直接在【Executable】里運行,最后一步需要將程序自關(guān)閉,例如使用dotNET寫一些控制臺程序。否則最好用CMD來運行所需的程序,再加上/C開關(guān)關(guān)閉它,讓SSIS任務(wù)流可以流到下一個任務(wù)。
創(chuàng)建好任務(wù)后,可以單獨執(zhí)行一個任務(wù),測試最終效果。
此處給大家演示下控制流任務(wù),可以將我們?nèi)粘TS多編程代碼的任務(wù),轉(zhuǎn)換為控件拖拉的方式,例設(shè)上面py腳本未做防錯處理,當已經(jīng)有res.csv文件存在時,再生成res.csv會報錯。此處使用SSIS的【文件系統(tǒng)任務(wù)】來完成文件先刪除操作。
接下來,我們回到常規(guī)任務(wù),將新生成的res.csv文件進行數(shù)據(jù)抽取并加載到數(shù)據(jù)庫中。
本篇的文件為csv文件,使用【平面文件源】來讀取,具體配置自行琢磨下,比【Excel源】要復(fù)雜一些,但因其非常常用,很有必要熟悉掌握。
目標我們存到關(guān)系數(shù)據(jù)庫中,這樣數(shù)據(jù)的二次利用才更方便,并且數(shù)據(jù)庫的存儲數(shù)據(jù)量也可以得到保障。
最終我們的數(shù)據(jù)流任務(wù)如下圖,增加加載時間,方便后期審核。
最終我們的控制流任務(wù)如下,完成我們預(yù)期的效果,將python清洗好的數(shù)據(jù),交給SSIS的后續(xù)步驟來調(diào)用。
在SSMS上打開目標表,發(fā)現(xiàn)數(shù)據(jù)已經(jīng)加載成功。
為何不使用一步到位直接python完成或SSIS完成?
在python的群體中,的確熟練使用后,將數(shù)據(jù)再作一步,直接上傳到數(shù)據(jù)庫中,也并非難事。
但對于一個工具型的做事方式來說,為何有現(xiàn)成的工具不用,而轉(zhuǎn)而自己從零開始寫代碼完成,況且自己寫出來的代碼,也不會像專業(yè)工具考慮得那么周到完善,例如數(shù)據(jù)上載過程中報錯怎樣處理?數(shù)據(jù)上載的性能怎樣保證等等,沒有足夠的專業(yè)度是寫不出很健壯的代碼。
所以若我們可以充分利用好各個工具的最大的優(yōu)勢部分,組合起來使用,每個工具也無需學(xué)習(xí)太深入,即可完成手頭的任務(wù),何樂而不為。
同樣的道理,如果用SSIS直接來處理臟亂的數(shù)據(jù)源,也是一個很痛苦的過程,在dotNET腳本中處理,也沒有python現(xiàn)成的pandas這些專業(yè)庫的數(shù)據(jù)清洗來得方便。
結(jié)語
本篇給大家再次開闊思路,使用現(xiàn)成的SSIS的ETL框架性功能,外加一些其他現(xiàn)成的好用的數(shù)據(jù)處理工具,強強聯(lián)合,使我們的數(shù)據(jù)ETL過程更加容易,也有更大的能力處理更多的復(fù)雜場景。
在下一篇中,我們重新回到微軟系中,使用SSIS和PowerQuery聯(lián)合,將輕量化的ETL工具一些好用易用的能力同樣嫁接到SSIS中,同時又可以避開此短板部分。敬請關(guān)注。
筆者未來聚焦在數(shù)據(jù)領(lǐng)域的分享,不限于Excel,會分享更多Sqlserver、dotNET、Azure、PowerBI等話題,升級數(shù)據(jù)分析的能力,歡迎繼續(xù)關(guān)注。*
系列文章
從數(shù)據(jù)民工到數(shù)據(jù)白領(lǐng)蛻變之旅(一)-工具總覽 https://www.jianshu.com/p/2bd3f90206ec
關(guān)于Excel催化劑
Excel催化劑先是一微信公眾號的名稱,后來順其名稱,正式推出了Excel插件,插件將持續(xù)性地更新,更新的周期視本人的時間而定爭取一周能夠上線一個大功能模塊。Excel催化劑插件承諾個人用戶永久性免費使用!
Excel催化劑插件使用最新的布署技術(shù),實現(xiàn)一次安裝,日后所有更新自動更新完成,無需重復(fù)關(guān)注更新動態(tài),手動下載安裝包重新安裝,只需一次安裝即可隨時保持最新版本!
Excel催化劑插件下載鏈接:https://pan.baidu.com/s/1Iz2_NZJ8v7C9eqhNjdnP3Q
聯(lián)系作者公眾號取名催化劑,因Excel本身的強大,并非所有人能夠立馬享受到,大部分人還是在被Excel軟件所虐的階段,就是頭腦里很清晰想達到的效果,而且高手們也已經(jīng)實現(xiàn)出來,就是自己怎么弄都弄不出來,或者更糟的是還不知道Excel能夠做什么而停留在不斷地重復(fù)、機械、手工地在做著數(shù)據(jù),耗費著無數(shù)的青春年華歲月。所以催生了是否可以作為一種媒介,讓廣大的Excel用戶們可以瞬間點燃Excel的爆點,無需苦苦地掙扎地沒日沒夜的技巧學(xué)習(xí)、高級復(fù)雜函數(shù)的燒腦,最終走向了從入門到放棄的道路。
最后Excel功能強大,其實還需樹立一個觀點,不是所有事情都要交給Excel去完成,也不是所有事情Excel都是十分勝任的,外面的世界仍然是一個廣闊的世界,Excel只是其中一枚耀眼的明星,還有其他更多同樣精彩強大的技術(shù)、工具等。*Excel催化劑也將借力這些其他技術(shù),讓Excel能夠發(fā)揮更強大的爆發(fā)!
關(guān)于Excel催化劑作者
姓名:李偉堅,從事數(shù)據(jù)分析工作多年(BI方向),一名同樣在路上的學(xué)習(xí)者。
技術(shù)路線從一名普通用戶,通過Excel軟件的學(xué)習(xí),從此走向數(shù)據(jù)世界,非科班IT專業(yè)人士。
擅長技術(shù)領(lǐng)域:Excel等Office家族軟件、VBA&VSTO的二次開發(fā)、Sqlserver數(shù)據(jù)庫技術(shù)、Sqlserver的商業(yè)智能BI技術(shù)、Powerbi技術(shù)、云服務(wù)器布署技術(shù)等等。
2018年開始職業(yè)生涯作了重大調(diào)整,從原來的正職工作,轉(zhuǎn)為自由職業(yè)者,暫無固定收入,暫對前面道路不太明朗,苦重新回到正職工作,對Excel催化劑的運營和開發(fā)必定受到很大的影響(正職工作時間內(nèi)不可能維護也不可能隨便把工作時間內(nèi)的成果公布于外,工作外的時間也十分有限,因已而立之年,家庭責任重大)。
和廣大擁護者一同期盼:Excel催化劑一直能運行下去,我所惠及的群體們能夠給予支持(多留言鼓勵下、轉(zhuǎn)發(fā)下朋友圈推薦、小額打賞下和最重點的可以和所在公司及同行推薦推薦,讓我的技術(shù)可以在貴司發(fā)揮價值,實現(xiàn)雙贏(初步設(shè)想可以數(shù)據(jù)顧問的方式或一些小型項目開發(fā)的方式合作)。
總結(jié)
以上是生活随笔為你收集整理的「数据ETL」从数据民工到数据白领蜕变之旅(六)-将Python的能力嫁接到SSIS中...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于 WPF 模块化架构下的本地化设计实
- 下一篇: .NET Core玩转爬虫系列之借助正则