就这么说吧,如果面试官问你,在你的项目开发中,一般会遇到什么函数呢?
emmmm,你脑瓜子是不是有点紊乱,空有一肚子墨水却不能系统的输出?
好像你都会,但面试官没有看出你的态度,你无敌的态度,与别具一格的理解力与知识的框架性!!!
怎么回答,让自己加大筹码,占据谈薪高点;让面试官自愧不如,跪下给你唱征服呢。
仔细感受:
A 先按照这种函数的3大分类,递进阐述遇到了什么函数
这里是按照数据记录数的量的变化来分类:普通函数,聚合函数,表生成函数。
1,普通函数
UDF函数就是数据记录数量不变,输入一行输出也是一行。
普通函数有哪些呢?咱们可以再进行归纳,举例子:
1.1,字符串函数:
substr,concat, cast , LPAD , regexp_replace, regexp_extract, get_json_object, if, nvl 等等。
1.2,日期函数:
日期与时间戳的转化 unix_timestamp, from_unixtime
日期的计算 date_sub, date_add, datediff
1.3,开窗函数:
1.3.1,聚合类开窗函数:
max()over() , min()over() , sum()over() , avg()over() , count()over()
1.3.2, 排序类开窗函数:
row_number()over() , rank()over() , dense_rank()over()
注意:排序类开窗函数必须加上 order by
1.3.3, 偏移类开窗函数
lead()over() , lag()over()
注意:偏移类开窗函数必须加上 order by
2, UDAF 聚合函数
UDAF是多行记录变一行,那必然是要按照什么粒度(group by)来进行聚合统计汇总的。
聚合函数有哪些呢?再进行分类:
2.1, 普通聚合函数
sum,min,max,avg,count + group by
2.2, 复杂聚合函数
collect_set (去重) + group by
collect_list (不去重) + group by
concat_group + group by
3, UDTF 表生成函数
表生成函数有哪些呢?再进行分类:
3.1, explode函数/posexplode函数
首选当然是explode函数了,它可以把一条array数组,map给炸开,变多条记录。
想了解此高阶函数的用法可以查看下面这个这篇文章。
hive 之 UDTF 之 explode 函数 和 lateral view 侧视图(原理)-CSDN博客
如果想了解此高阶函数在项目业务中的应用场景,大家可以继续阅读下面这篇文章。
lateral view explode (split(column,‘exp’)) 爆炸函数-CSDN博客
3.2,inline函数
这个后续会给大家去分享。
3.3,用户自定义函数
其次,你要是实力强悍,可以像一些大厂一样,自己开发出一套自定义函数,实现某些特定的功能。
比如说:对json字符串里的某个元素中的特定数据,给炸开提取出来。
再比如说,开发出一个函数:可以对手机号进行加密,并且可以对手机号进行非空判断,位数判断,对符合校验规则的手机号进行加密处理,不符合的数据直接返回不处理。
当然,当大家看完上述内容,可能觉得说那行列转换相关的函数呢???
emmmm,行列转换函数那是 sum/max+case when 打出的一套组合拳技能,不在今天的范畴之内,下次也会另外起一个专题讲述。
B 再结合你在实际项目中开发的业务指标
用到什么函数,咱可以按照上面的归类,层层递进的跟面试官答出来,emmm我相信从上面这个观点切入,会让面试官耳目一新。在技术层面答成这样,已经可以从侧面反映我们的数据敏感性了。
但是还不够,咱还不够深沉,没有办法让面试官在整个职业生涯里记住我们就是咱的失败了。
我们可以在答完一些重要的函数的时候,顺便结合一下项目业务,在求什么指标的时候会用上。
业务栗子1:
咱在讲偏移类开窗函数的时候,我们可以顺便说,这个一般会在公司某某产品的同比/环比销售量的时候用得比较多,在算某app的用户连续登录天数也会涉及到。
业务栗子2:
咱在讲 排序类开窗函数的时候,我们可以顺便说,这个会在算员工的业绩的时候,需要先算出客户和员工的下挂关系,按照下挂关系的优先级来取(先将每种下挂关系 用case when 按照优先级定义一个数字,然后对其进行排序)。
等等等。。。
当我们这样子打出一套组合拳的时候,面试官就会觉得咱思想是有架构的,逻辑是有层次的,表达是清晰的,肚子里是有墨水的,一个高薪offer就在来的路上了!!!
就完美了!!!