写在前⾯:
作为甲⽅,对于⼄⽅派来的开发⼈员,我是会⾃⼰⾯⼀下。总体来说遇到的⽔平不⼀,于是经过这三年多的⾯(cui)试(can),总结了⼀套⾃⼰的⾯试套路,中间也遇到过很多想吐槽的东西,于是⼤概记录了下来。在后⾯, 也写了些关于这⽅⾯的职业发展和我个⼈的建议。问题很基础,DBA路过误笑,同⾏⾼⼿欢迎过来喷⼀喷,⼀起进步。
先说下⾯试的顺序,⾸先我们现有的开发⼈员问基本的SQL语句问题和SSIS组件问题,然后我继续问以下问题。
问题1:假如有⼀个job突然失败了,那么你第⼀时间应该先去看哪⾥。我的答案:
⾸先去看job history,看具体的错误信息,根据这个信息决定如何去解决问题。如果在ETL中有⾃定义的⽇志输出,那么再去看⾃定义⽇志的内容。吐槽:
居然很⼤⼀部分⼈不看job history,⽽是看⾃定义的⽇⾄。还有看哪⾥都不知道的,开发ETL不管后期的维护和错误排查,就算再简单的ETL,也不可能⼀直不出问题,好⽐写个代码不知道如何排错⼀样,所以到底做没做过ETL开发 ,这个问题直接能看出来。
另,往往⼤型项⽬会有⾃定义⽇⾄输出,但是能说出这⼀点的先别给⾼分,因为很有可能只是知道⽽已,具体了解多少还要参考下⾯⼏个问题。
问题2:假如⼀个job本来应该在凌晨两点跑完的,但是早上上班的时候发现还没有跑完,接下来会怎么做。我的答案:
这么久的延迟最有可能是阻塞,⽐如下游报表或者客户端仍在数据仓库⾥查数。
排除这个问题,先⽤系统⾃带的报表查看⽬前是否有阻塞,或者⽤sp_who3⽹上⼤家扩展的⼀个⽅法来进⾏查询。如果发现ETL进程被阻塞,kill掉阻塞的进程,确保ETL能正常进⾏下去。
避免类似阻塞的情况发⽣,可以在ETL进⾏之前终⽌报表服务或查询账号,ETL成功之后再启动他们。吐槽:
很多⼈都归结到数据量的巨增导致,这对⼀个正常的业务来说可能性⽐较低⼀些,但如果能说出这个原因也会多少加⼀点分。能知道⽤sp_who3来看⽬前有哪些语句在转的会加很⼤⼀部分分数,这个意识很关键。
问题3:接到⽤户抱怨说⼀个报表运⾏的很慢,如何处理。我的答案:先跑⼀下这个报表,重现⼀下运⾏缓慢的现象。然后在sql server端sp_who3⼀下看看到底是卡在了哪条查询,把查询单独拿出来进⾏进⼀步分析和优化。点评:偶尔问题也会问成ETL运⾏很慢,像上⼀个问题⼀样,主要还是考察是否有查看当前哪些语句在跑的意识。吐槽:会有⼈回答说把报表源代码拿过来⼀⾏⼀⾏去分析,这样虽然有可能找到问题,但是很慢。所以我会对做这个超过三年经验的⼈产⽣质疑。
问题4:如何进⼀步优化我的答案:
看执⾏计划,查看⼏个关键点,⽐如索引缺失,SQL语句需要优化等问题。点评:
能第⼀时间想到索引问题的加分,能想到SQL语句写法不地道的也加分。这个需要追问,进⼀步考察执⾏计划,详见下⼀个问题。吐槽:
有不少说⼀⾏⼀⾏去看的,所以会继续追问执⾏计划的问题。
问题5:如何快速的知道是由于索引缺失导致的我的答案:看执⾏计划,通常执⾏计划会直接提⽰具体缺失哪个索引,并且提供相应语句创建索引。
另外这个时候在执⾏计划⾥,看是否有表扫描,如果有说明索引缺失,如果看到索引查找说明是命中索引的。
如果系统⽆法给出的,可以先看执⾏计划⾥哪部分消耗的资源(百分⽐)最⾼,然后看⾥⾯所消耗的io数值是否很⾼,如果是的话说明索引也是有缺失,需要根据具体的情况添加索引。点评:
如果提到WHERE顺序的加分。
没提执⾏计划,但是提到看join条件,再看有没有索引的,我只能少加点分,毕竟这样查问题效率不⾼。吐槽:
居然很少⼈提到系统⾃动的索引缺失提⽰。。。半数⼈说看执⾏计划⾥每个步骤的时间 。。。
也有半数⼈知道看执⾏计划,但是说不出表扫描和索引扫描。能看io消耗的真的很少很少。
问题6:索引的进⼀步问题。⽐如:
聚集索引和⾮聚集索引的区别。(看对叶级结点的区别)为什么聚集索引只能有⼀个。
⼀个表是否有聚集索引,对这个表的数据存储⽅式区别是什么。(这个回答不上来通常不减分)吐槽:
具体答案就不写了,主要看回答是否能回答到点上,⽐如叶级结点的区别,数据排序,堆表等。⾯试的所有⼈当中,能把部分问题说明⽩的很少,部分⼈也只是背书。
写在后⾯:
这些问题,估计做DBA的或者BI的同⾏应该是在边看边笑吧,但我吐槽的⼤家也看到了,能答到点⼦上的,在北京,很少,也许你说我们的vendor不给⼒,我可没这么说。
另外汇总了下我个⼈认为的,ETL开发对于不同⼯作年限的最低要求。⼯作⼀年的要求:
熟悉各种SQL语句的写法,熟悉SSIS包⾥常⽤的模块。三年:
知道索引,知道优化SQL语句,熟悉建模。能够处理⽇常ETL以及数据库级别的常见问题。五年:
知道如何规划整个ETL,对设计数据仓库⾮常熟悉。七年:
可以带领团队实施⼤规模的项⽬。
最后的最后:
说实在的,这⾏能⼀直⼲下来的很少很少,⼤多都是半路转过来,或者⼲不下去转别的了。
另外纯ETL开发从技能⾓度来说,如果只偏向这个⽅向确实以后的路越⾛越窄,同时配合些辅助的技能会路⼦宽很多,⽐如报表开发,DBA,架构,⼤数据等。
还有,甭管做什么,对业务的理解也很重要,⽽做BI这⽅⾯,是最适合对整个公司的系统架构有⽐较宽泛和略微深⼊的理解的,很多招聘要求⾥,都需要对某领域的业务有⼀定的了解,所以可以看出来这个的重要性,以及从⼄⽅跳到甲⽅的重要资本。
因篇幅问题不能全部显示,请点此查看更多更全内容