某大厂大数据开发工程师(偏数据仓库)社招面经

从校招之后两年多以来的第一次面试,悲惨的挂了。记录一下问题和不足吧。

1、问项目,以及你在其中参与的角色,遇到的挑战之类的。

2、继续基于项目发问,因为我之前做的都是离线数据开发,问 怎样保障数据及时准确出具?以及数据质量如何保证?

3、数据仓库分层思想,可以结合自己公司数仓的情况。

ods-dwd/dws-dm,每一层大致介绍一下作用是什么。最后说一下这么分层的好处。

4、有没有听过cube表。

5、事务性数据库和数据仓库在建表时遵循怎样的范式(我说了第一范式的开头,面试官说他要的不是这个…其实是问我这两类数据库的表建表规范有什么不同)

【转载】数据库(范式建模)和数据仓库(维度建模)在设计中的侧重点:

在大部分的数据仓库设计中,一般是不怎么考虑是否满足第几范式的,特别是互联网场景下的数据建设就更少考虑数据仓库和范式之间的关系。

数据库(OLTP)的设计,主要是基本的、日常的事务处理,例如银行交易。直白点讲,就是各种增删改查,需要对数据进行操作。而数据仓库(OLAP),主要是面向日常数据分析,它的数据主要是插入和查询,基本不涉及删除和修改操作。

数据库的三范式,主要优化的是增删改的问题,比如数据冗余、更新异常、删除异常等。这些也正是数据库设计比较关注的点。而数据仓库对这方面的关注度则比较少,数据仓库更关注的是使用是否方便查询效率是否高,因此在设计数据仓库的时候不必太多关注范式的设计,一般第一或者第二范式就够用。

另外,数据仓库不同层级的设计也会用到不同的建模方式,比如说接近业务数据的层次,会更倾向使用范式建模,接近数据分析的层次则会更倾向于维度建模。

6、数据倾斜的原理,表现,解决办法(解决办法我提到一个是把倾斜数据单独抽出再同样做一遍操作,面试官问我为什么这样数据就不倾斜了)

7、他似乎发现我对MapReduce的底层不熟悉,开始写了一段sql,问我MapReduce是如何一步步实现这段sql的,见我犹豫说不上来,问我map,shuffle,reduce是做了什么事。

Select district, count(distinct user_id) as cn
from  tablea 
where date = ‘2020-08-01’ and city = ‘Shanghai’
group by district

还有问这段sql要是改写怎么写比较好。可以把distinct改为group by。

【转载】distinct和group by的性能比较:

1、引入了DISTINCT,在Map阶段无法利用combine对输出结果消重,必须将id作为Key输出,在Reduce阶段再对来自于不同Map Task、相同Key的结果进行消重,计入最终统计值。且作业运行时的 Reduce Task个数为1 ,对于统计大数据量时,这会导致最终Map的全部输出由单个的ReduceTask处理。这唯一的Reduce Task需要Shuffle大量的数据并且进行排序聚合等处理,这使得它成为整个作业的IO和运算瓶颈。

2、可以先使用group by对数据进行分组,再count。这样group by能起多个reducer,将数据分布到多台机器上执行,处理速度就快了。

结论:数据大的时候尽量不要用distinct,体现在不会出现内存溢出。  count(distinct) 需要将排序key全部加载到内存,再比较去重统计; count group by 是先对key 排序,再统计,其实消耗的时间会更多些,可以减少oom的问题,job数目也会增加  只是一种对distinct的优化 用时间换来的;

8、星系模型雪花模型那些

9、现场写sql。用到了分组函数,以及考了对连续时间段的判断。

10、职业规划,为什么做数仓。

你可能感兴趣的:(数据仓库,社招面试)