Hive之MACRO(宏)的使用
Posted 浊酒南街
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hive之MACRO(宏)的使用相关的知识,希望对你有一定的参考价值。
目录
1、宏是什么?
宏可以当做一个自定义“函数”,其开发过程与UDF相比更加简捷;
什么时侯使用宏?
当逻辑需要反复使用时。这时我们可以使用宏对这段逻辑进行提炼,起到优化开发效率、提升程序可读性的效果(尤其是括号嵌套很多层、case-when嵌套很多层的时候)
2、举例
下面分享几个我在工作中常用的宏:
一、有关空值的处理
create temporary macro nn(x string) nvl(trim(x),'') = '';
如果x为NULL或空串,则返回true。个人觉得该逻辑还是非常常用的,所以就写了这样一个宏,命名简单,连敲两下n即可。
create temporary macro nn2rand (x string) case when nn(x) then concat('hive',rand()) else x end;
顾名思义,nn2rand,把NULL和空串转为随机串。当遇到由“key=NULL或空串”引起的数据倾斜问题时,应把key转化为随机字符串,使得这部分记录均匀地分配到各个reduce中。
二、有关时间的计算
create temporary macro properdt (dt string) concat_ws('-',split(dt,'/')[0],lpad(split(dt,'/')[1],2,'0'),lpad(split(dt,'/')[2],2,'0'));
它的功能是将2019/1/1变为2019-01-01
三、数学计算
create temporary macro halfceil (x decimal)
case
when x = floor(x) then x
when x - floor(x) <= 0.5 then floor(x) + 0.5
else ceil(x)
end;
功能:按0.5向上取整。例如1.2变成1.5,1.7变成2.0,而1.5、2.0保持不变。有了宏,再长的数学公式都可以单行实现
参考博客:https://blog.csdn.net/weixin_39454683/article/details/90485257?spm=1001.2014.3001.5506
以上是关于Hive之MACRO(宏)的使用的主要内容,如果未能解决你的问题,请参考以下文章