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(宏)的使用的主要内容,如果未能解决你的问题,请参考以下文章

C++ macro(宏)使用小结

macro_rules 是常规宏吗?

Rust 1.7.0的macro宏-语法分析和使用举例

转 freemarker macro(宏)的使用

在macro_rules中使用另一个宏而不需要生锈的“extern crate”

Zabbix实战-简易教程--宏变量(Macro)