「数据ETL」从数据民工到数据白领蜕变之旅(六)-将Python的能力嫁接到SSIS中...

前一篇推文中,给大家演示了在SSIS上使用dotNET脚本,实现一些原生SSIS难以实现的功能,并冠以无限可能的说法。

充分复用python的现有优势

python的确是一门非常优秀的编程语言,特别是在数据领域,网络爬虫、数据处理、分析等方面都是非常强劲。

估计现在许多做数据的朋友们,或多或少也会学习一下python,学深一门语言花费大,入门一门语言是容易的。

特别是已经掌握了一门现有语言的基础上,再学一门新语言,也是不难,熟悉语法、现有类库、包调用即可。

笔者因喜欢使用现成的微软的工具,在微软的生态里专研得深,产品间的交叉应用场景广,所以学习dotNET是非常不错的投资回报。

若其他朋友的学习路径是python为主,本文可以给python群体一个大大的精喜,在python上做好它最擅长的部分,其余流程交给SSIS现有成熟、简单易用的数据ETL框架来完成,双重优势发挥得淋漓尽致。

演示内容介绍

本文打算使用python进行数据的清洗部分,引用的案例是带笔者入门dotNET的我的师傅的出品案例:清洗一份课程表数据,将其转换为结构化的一维表结构。

我师傅精通dotNET、python等语言,专业程序员,写得代码很规范,很值得学习和关注。

详细文章出处:

"Python替代Excel Vba"系列(三):pandas处理不规范数据

数据源结构为:

640?wx_fmt=png

最终转换的结果:

640?wx_fmt=png

使用原理介绍

本次使用的是SSIS可以调用处部程序的功能,调用CMD,然后输入参数为 python main.py,启用python并运行main.py这个文件。

以上的前提条件是本机安装好python,并设置好环境变量让CMD可以直接通过敲打python即可启动python程序,根据不同脚本的要求,安装好相应的包,例如本篇是使用pandas作数据清洗,在python中需要安装好pandas包。

从实例数据.xlsx中,经过python脚本的运行,生成一个res.csv的文件。

640?wx_fmt=png
640?wx_fmt=png

在SSIS上使用python脚本

在控制流任务中,有【执行进程任务】,拉一个任务到右侧,并双击此任务进行详细配置。

在【处理】选项卡中,放入【Executable】参数为CMD路径,若运行其他程序同理。

在【Arguments】参数中,输入CMD调用的参数,此处输入绝对路径,并且在CMD参数中加上/C开关,表示运行完关闭CMD程序。

在python的路径识别中,需要转换为反斜杠,如:python F:/自媒体相关/其他文章分享/数据ETL/main.py

640?wx_fmt=png

运行后关闭程序很关键,若自己写出的程序,想直接在【Executable】里运行,最后一步需要将程序自关闭,例如使用dotNET写一些控制台程序。否则最好用CMD来运行所需的程序,再加上/C开关关闭它,让SSIS任务流可以流到下一个任务。

创建好任务后,可以单独执行一个任务,测试最终效果。

640?wx_fmt=png

此处给大家演示下控制流任务,可以将我们日常许多编程代码的任务,转换为控件拖拉的方式,例设上面py脚本未做防错处理,当已经有res.csv文件存在时,再生成res.csv会报错。此处使用SSIS的【文件系统任务】来完成文件先删除操作。

640?wx_fmt=png

接下来,我们回到常规任务,将新生成的res.csv文件进行数据抽取并加载到数据库中。

本篇的文件为csv文件,使用【平面文件源】来读取,具体配置自行琢磨下,比【Excel源】要复杂一些,但因其非常常用,很有必要熟悉掌握。

640?wx_fmt=png

目标我们存到关系数据库中,这样数据的二次利用才更方便,并且数据库的存储数据量也可以得到保障。

640?wx_fmt=png

最终我们的数据流任务如下图,增加加载时间,方便后期审核。

640?wx_fmt=png

最终我们的控制流任务如下,完成我们预期的效果,将python清洗好的数据,交给SSIS的后续步骤来调用。

640?wx_fmt=png

在SSMS上打开目标表,发现数据已经加载成功。

640?wx_fmt=png

为何不使用一步到位直接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

640?wx_fmt=png
联系作者
640?wx_fmt=png
公众号

取名催化剂,因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催化剂一直能运行下去,我所惠及的群体们能够给予支持(多留言鼓励下、转发下朋友圈推荐、小额打赏下和最重点的可以和所在公司及同行推荐推荐,让我的技术可以在贵司发挥价值,实现双赢(初步设想可以数据顾问的方式或一些小型项目开发的方式合作)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/314337.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.NET Core玩转爬虫系列之借助正则表达式入门篇

接下来一段时间,我会花些时间研究C#玩转爬虫的方法及其实践。话不多说,开始吧~一般来说:设计并实现一个爬虫的步骤是:模拟登录 -> 模拟发送request请求 -> 取回response数据 -> 提取所需信息并将其进行重新组织 -> 存入DB或文件中 -> 后期…

单位根反演

单位根反演 https://www.cnblogs.com/cjyyb/p/10838495.html

ASP.NET Core on K8S深入学习(5)Rolling Update

本篇已加入《.NET Core on K8S学习实践系列文章索引》,可以点击查看更多容器化技术相关系列文章。01—What is Rolling Update?为了服务升级过程中提供可持续的不中断的服务,K8S提供了Rolling Update机制,它可以使得服务近乎无缝地平滑升级&…

LOJ6053简单的函数(min_25筛)

LOJ6053简单的函数 https://loj.ac/p/6053 min_25筛模板题&#xff0c;但是要注意质数点有2比较特殊&#xff0c;需要在y0的时候特判质数包含2的情况。 #include<bits/stdc.h> #define LL long long using namespace std; inline LL read() {char x\0;LL fh1,sum0;for(…

HDU 5608 function (杜教筛)

function 推式子 n2−3n2∑d∣nf(d)calulateS(n)∑i1nf(i)mod1097n ^ 2 - 3n 2 \sum_{d \mid n} f(d)\\ calulate\ S(n) \sum_{i 1} ^{n} f(i) \bmod 10 ^9 7\\ n2−3n2d∣n∑​f(d)calulate S(n)i1∑n​f(i)mod1097 考虑对式子进行化简 ∑i1n(i2−3i2)∑i1n∑d∣if(d)∑…

依赖注入在 dotnet core 中实现与使用:1 基本概念

关于 Microsoft Extension: DependencyInjection 的介绍已经很多&#xff0c;但是多数偏重于实现原理和一些特定的实现场景。作为 dotnet core 的核心基石&#xff0c;这里准备全面介绍它的概念、原理和使用。这里首先介绍概念部分。1. 概念该项目在 GitHub 的地址&#xff1a;…

【UOJ#188】Sanrd(min_25筛)

【UOJ#188】Sanrd&#xff08;min_25筛&#xff09; 求解区间[l,r]中所有数次大质因子的和&#xff0c;对于p^k的贡献当k大于1时定义为p&#xff0c;等于1时定义为0. 利用min_25筛第二部分&#xff0c;每一次筛掉的就是最小质因子的幂次&#xff0c;所以当前所在S(x,y)的质数…

HDU 5528 Count a * b

Count a * b 推式子 f(n)∑i0n−1∑j0n−1n∤ijn2−∑i1n∑j1nn∣ijn2−∑i1n∑j1nngcd(i,n)∣igcd(i,n)jn2−∑i1nnngcd(i,n)n2−∑i1ngcd(i,n)n2−∑d∣nd∑i1n(gcd(i,n)d)n2−∑d∣nd∑i1nd(gcd(i,nd)1)n2−∑d∣ndϕ(nd)f(n) \sum_{i 0} ^{n - 1} \sum_{j 0} ^ {n - 1} …

【LOJ#572】Misaka Network 与求和(莫比乌斯反演/杜教筛/min_25筛)

【LOJ#572】Misaka Network 与求和 https://www.cnblogs.com/cjyyb/p/10170630.html 看到次大质因子就可以想到是min_25筛了&#xff0c;然后只需要做莫比乌斯反演&#xff0c;然后预处理整除分块点的前缀和&#xff0c;然后再结合杜教筛即可。

软件设计的第一性原理:结构化抽象

软件设计的第一性原理&#xff0c;是结构化抽象。术生于道&#xff0c;技术生于原理。引语所谓的第一性原理&#xff0c;就是无论使用什么方法论&#xff0c;都无法绕过的那最最基础的部分。无论是 DDD 设计&#xff0c;还是面向模式的架构设计&#xff0c;或 微服务架构&#…

HDU 6706 huntian oy (欧拉函数 + 杜教筛)

huntian oy 推式子 ∑i1n∑j1igcd(ia−ja,ib−jb)(gcd(i,j)1)∑i1n∑j1i(i−j)(gcd(i,j)1)∑i1ni∑j1i(gcd(i,j)1)−∑i1n∑j1ij(gcd(i,j)1)∑i1niϕ(i)−∑i1niϕ(i)(i1)2∑i1niϕ(i)−(i1)2然后套路地变成求S(n)∑i1niϕ(i)g(n)nϕ(n)这里直接套用杜教筛化简得到g(1)S(n)∑i…

【LOJ#6682】梦中的数论(min_25筛)

【LOJ#6682】梦中的数论 https://www.cnblogs.com/cjyyb/p/11178395.html 利用min_25筛&#xff0c;求解约数个数函数平方的前缀和。

基于.NetCore结合docker-compose实践Gitlab-CI/CD 排坑指南

引言看过docker-compose真香的园友可能留意到当时是【把部署dll文件拷贝到生产机器】&#xff0c;即时打包成镜像并启动容器&#xff0c;并没有完成CI/CD。经过长时间实操验证&#xff0c;终于完成基于Gitlab的CI/CD实践&#xff0c;本次实践的坑位很多&#xff0c; 实操过程尽…

51 NOD 1227 平均最小公倍数(杜教筛)

1227 平均最小公倍数 推式子 S(n)∑i1n∑j1ilcm(i,j)i∑i1n∑j1iijigcd(i,j)∑i1n∑j1ijgcd(i,j)∑i1n∑d1i∑j1ijd(gcd(i,j)d)∑i1n∑d1i∑j1idj(gcd(j,id)1)∑i1n∑d1iidϕ(id)(id1)2∑d1n∑i1ndiϕ(i)(i1)2接下来就是杜教筛求∑i1niϕ(i)了&#xff0c;g(1)S(n)∑i1n(f∗g)…

【BZOJ3512】DZY Loves Math IV(杜教筛)

【BZOJ3512】DZY Loves Math IV&#xff08;杜教筛&#xff09; https://www.cnblogs.com/cjyyb/p/10165338.html

.NET Core很酷,你不得不知

我一直回想我的第一篇博文&#xff0c;那是关于多个服务的服务器平台的详细教程&#xff0c;它使用 GitLab CI 在 AWS 上&#xff0c;当时使用单个命令行进行部署&#xff0c; 至今回想&#xff0c;令人感觉很酷。前几天&#xff0c;我偶然听说一些软件公司的 HR 在招聘原则上拒…

51 NOD 1363 最小公倍数之和 (欧拉函数思维应用)

1363 最小公倍数之和 推式子 ∑i1nlcm(i,n)n∑i1nigcd(i,n)n∑d∣n∑i1nid(gcd(i,n)d)n∑d∣n∑i1ndi(gcd(i,nd)1)n∑d∣ndϕ(d)(d1)2\sum_{i 1} ^{n} lcm(i, n)\\ n\sum_{i 1} ^{n} \frac{i}{gcd(i, n)}\\ n \sum_{d \mid n} \sum_{i 1} ^{n} \frac{i}{d}(gcd(i, n) d)…

【BZOJ3930】选数(莫比乌斯反演倍数形式,杜教筛)

【BZOJ3930】选数 https://www.cnblogs.com/cjyyb/p/8303813.html

程序员修神之路--高并发系统设计负载均衡架构

点击上方“蓝字”关注&#xff0c;酷爽一夏菜菜哥&#xff0c;上次你给我讲的分库分表策略对我帮助很大有帮助就好&#xff0c;上次请我的咖啡也很好喝~呵呵&#xff0c;不过随着访问量的不断加大&#xff0c;网站我又加了nginx做负载均衡好呀&#xff0c;看来要进阶高级工程师…

类欧几里得算法详细推导过程(附带模板)

类欧几里得算法推导 初识 给出三种形式&#xff1a; f(a,b,c,n)∑i0n⌊aibc⌋f(a, b, c, n) \sum_{i 0} ^{n} \lfloor\frac{ai b}{c}\rfloorf(a,b,c,n)∑i0n​⌊caib​⌋g(a,b,c,n)∑i0ni⌊aibc⌋g(a, b, c, n) \sum_{i 0} ^{n}i \lfloor \frac{ai b}{c}\rfloorg(a,b,c…