前一篇推文中,给大家演示了在SSIS上使用dotNET脚本,实现一些原生SSIS难以实现的功能,并冠以无限可能的说法。
充分复用python的现有优势
python的确是一门非常优秀的编程语言,特别是在数据领域,网络爬虫、数据处理、分析等方面都是非常强劲。
估计现在许多做数据的朋友们,或多或少也会学习一下python,学深一门语言花费大,入门一门语言是容易的。
特别是已经掌握了一门现有语言的基础上,再学一门新语言,也是不难,熟悉语法、现有类库、包调用即可。
笔者因喜欢使用现成的微软的工具,在微软的生态里专研得深,产品间的交叉应用场景广,所以学习dotNET是非常不错的投资回报。
若其他朋友的学习路径是python为主,本文可以给python群体一个大大的精喜,在python上做好它最擅长的部分,其余流程交给SSIS现有成熟、简单易用的数据ETL框架来完成,双重优势发挥得淋漓尽致。
演示内容介绍
本文打算使用python进行数据的清洗部分,引用的案例是带笔者入门dotNET的我的师傅的出品案例:清洗一份课程表数据,将其转换为结构化的一维表结构。
我师傅精通dotNET、python等语言,专业程序员,写得代码很规范,很值得学习和关注。
详细文章出处:
"Python替代Excel Vba"系列(三):pandas处理不规范数据
数据源结构为:
最终转换的结果:
使用原理介绍
本次使用的是SSIS可以调用处部程序的功能,调用CMD,然后输入参数为 python main.py,启用python并运行main.py这个文件。
以上的前提条件是本机安装好python,并设置好环境变量让CMD可以直接通过敲打python即可启动python程序,根据不同脚本的要求,安装好相应的包,例如本篇是使用pandas作数据清洗,在python中需要安装好pandas包。
从实例数据.xlsx中,经过python脚本的运行,生成一个res.csv的文件。
在SSIS上使用python脚本
在控制流任务中,有【执行进程任务】,拉一个任务到右侧,并双击此任务进行详细配置。
在【处理】选项卡中,放入【Executable】参数为CMD路径,若运行其他程序同理。
在【Arguments】参数中,输入CMD调用的参数,此处输入绝对路径,并且在CMD参数中加上/C开关,表示运行完关闭CMD程序。
在python的路径识别中,需要转换为反斜杠,如:python F:/自媒体相关/其他文章分享/数据ETL/main.py
运行后关闭程序很关键,若自己写出的程序,想直接在【Executable】里运行,最后一步需要将程序自关闭,例如使用dotNET写一些控制台程序。否则最好用CMD来运行所需的程序,再加上/C开关关闭它,让SSIS任务流可以流到下一个任务。
创建好任务后,可以单独执行一个任务,测试最终效果。
此处给大家演示下控制流任务,可以将我们日常许多编程代码的任务,转换为控件拖拉的方式,例设上面py脚本未做防错处理,当已经有res.csv文件存在时,再生成res.csv会报错。此处使用SSIS的【文件系统任务】来完成文件先删除操作。
接下来,我们回到常规任务,将新生成的res.csv文件进行数据抽取并加载到数据库中。
本篇的文件为csv文件,使用【平面文件源】来读取,具体配置自行琢磨下,比【Excel源】要复杂一些,但因其非常常用,很有必要熟悉掌握。
目标我们存到关系数据库中,这样数据的二次利用才更方便,并且数据库的存储数据量也可以得到保障。
最终我们的数据流任务如下图,增加加载时间,方便后期审核。
最终我们的控制流任务如下,完成我们预期的效果,将python清洗好的数据,交给SSIS的后续步骤来调用。
在SSMS上打开目标表,发现数据已经加载成功。
为何不使用一步到位直接python完成或SSIS完成?
在python的群体中,的确熟练使用后,将数据再作一步,直接上传到数据库中,也并非难事。
但对于一个工具型的做事方式来说,为何有现成的工具不用,而转而自己从零开始写代码完成,况且自己写出来的代码,也不会像专业工具考虑得那么周到完善,例如数据上载过程中报错怎样处理?数据上载的性能怎样保证等等,没有足够的专业度是写不出很健壮的代码。
所以若我们可以充分利用好各个工具的最大的优势部分,组合起来使用,每个工具也无需学习太深入,即可完成手头的任务,何乐而不为。
同样的道理,如果用SSIS直接来处理脏乱的数据源,也是一个很痛苦的过程,在dotNET脚本中处理,也没有python现成的pandas这些专业库的数据清洗来得方便。
结语
本篇给大家再次开阔思路,使用现成的SSIS的ETL框架性功能,外加一些其他现成的好用的数据处理工具,强强联合,使我们的数据ETL过程更加容易,也有更大的能力处理更多的复杂场景。
在下一篇中,我们重新回到微软系中,使用SSIS和PowerQuery联合,将轻量化的ETL工具一些好用易用的能力同样嫁接到SSIS中,同时又可以避开此短板部分。敬请关注。
笔者未来聚焦在数据领域的分享,不限于Excel,会分享更多Sqlserver、dotNET、Azure、PowerBI等话题,升级数据分析的能力,欢迎继续关注。*
系列文章
从数据民工到数据白领蜕变之旅(一)-工具总览 https://www.jianshu.com/p/2bd3f90206ec
关于Excel催化剂
Excel催化剂先是一微信公众号的名称,后来顺其名称,正式推出了Excel插件,插件将持续性地更新,更新的周期视本人的时间而定争取一周能够上线一个大功能模块。Excel催化剂插件承诺个人用户永久性免费使用!
Excel催化剂插件使用最新的布署技术,实现一次安装,日后所有更新自动更新完成,无需重复关注更新动态,手动下载安装包重新安装,只需一次安装即可随时保持最新版本!
Excel催化剂插件下载链接:https://pan.baidu.com/s/1Iz2_NZJ8v7C9eqhNjdnP3Q
取名催化剂,因Excel本身的强大,并非所有人能够立马享受到,大部分人还是在被Excel软件所虐的阶段,就是头脑里很清晰想达到的效果,而且高手们也已经实现出来,就是自己怎么弄都弄不出来,或者更糟的是还不知道Excel能够做什么而停留在不断地重复、机械、手工地在做着数据,耗费着无数的青春年华岁月。所以催生了是否可以作为一种媒介,让广大的Excel用户们可以瞬间点燃Excel的爆点,无需苦苦地挣扎地没日没夜的技巧学习、高级复杂函数的烧脑,最终走向了从入门到放弃的道路。
最后Excel功能强大,其实还需树立一个观点,不是所有事情都要交给Excel去完成,也不是所有事情Excel都是十分胜任的,外面的世界仍然是一个广阔的世界,Excel只是其中一枚耀眼的明星,还有其他更多同样精彩强大的技术、工具等。*Excel催化剂也将借力这些其他技术,让Excel能够发挥更强大的爆发!
关于Excel催化剂作者
姓名:李伟坚,从事数据分析工作多年(BI方向),一名同样在路上的学习者。
技术路线从一名普通用户,通过Excel软件的学习,从此走向数据世界,非科班IT专业人士。
擅长技术领域:Excel等Office家族软件、VBA&VSTO的二次开发、Sqlserver数据库技术、Sqlserver的商业智能BI技术、Powerbi技术、云服务器布署技术等等。
2018年开始职业生涯作了重大调整,从原来的正职工作,转为自由职业者,暂无固定收入,暂对前面道路不太明朗,苦重新回到正职工作,对Excel催化剂的运营和开发必定受到很大的影响(正职工作时间内不可能维护也不可能随便把工作时间内的成果公布于外,工作外的时间也十分有限,因已而立之年,家庭责任重大)。
和广大拥护者一同期盼:Excel催化剂一直能运行下去,我所惠及的群体们能够给予支持(多留言鼓励下、转发下朋友圈推荐、小额打赏下和最重点的可以和所在公司及同行推荐推荐,让我的技术可以在贵司发挥价值,实现双赢(初步设想可以数据顾问的方式或一些小型项目开发的方式合作)。