PS:最近接个小需求:针对用户敏感信息脱敏处理,数据源在mysql。刚开始想法是直接用mysql里面的regexp_replace函数对敏感字段进行清洗。后来发现mysql8.0才支持regexp_replace()。mysql5.7里只有正则匹配的函数。再后来想把数据抽取到hdfs上用hive来处理。一想到还得抽数建表,我最终决定用mysql的自定义函数来解决,省时省力。
1.开启mysql自定义函数支持
a.查看mysql当前是否支持编写自定义:
b.log_bin_trust_function_creators=OFF表示没有开启自定义函数。输入开启命令。
注:此处不开启,后面自定义函数写好。调用不起作用!
2.编写regexp_replace()自定义函数
a.编写代码如下:
#创建前删除已经创建的自定义函数
drop function if exists regexp_replace;
#创建 regexp_replace函数
DELIMITER $$
CREATE FUNCTION `regexp_replace`(string_a VARCHAR(1000),pattern VARCHAR(1000),string_b VARCHAR(1000))
RETURNS VARCHAR(1000)
DETERMINISTIC
BEGIN
DECLARE string_c VARCHAR(1000);
DECLARE nub VARCHAR(1);
DECLARE i INT;
SET i =1;
SET string_c ='';
IF string_a REGEXP pattern THEN
loop_label: LOOP
IF i>CHAR_LENGTH(string_a) THEN
LEAVE loop_label;
END IF;
SET nub = SUBSTRING(string_a,i,1);
IF NOT nub REGEXP pattern THEN
SET string_c = CONCAT(string_c,nub);
ELSE
SET string_c = CONCAT(string_c,string_b);
END IF;
SET i=i+1;
END LOOP;
ELSE
SET string_c = string_a;
END IF;
RETURN string_c;
END$$
DELIMITER;
b.上述代码执行后,检查下是否创建成功。结果已经创建成功。
c.对该函数进行测试,结果成功!