mysql自定义函数实现数据正则处理
Posted idvcn
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql自定义函数实现数据正则处理相关的知识,希望对你有一定的参考价值。
数据格式
localhost 101_CPU_load 2019-01-24 10:06:36 load1=0.010;10.000;20.000;0; load5=0.020;10.000;20.000;0; load15=0.050;10.000;20.000;0;
192.168.*.* 103_Sys_users 2019-01-21 05:34:23 users=0;2;5;0
192.168.*.* 102_Disk_root 2019-01-23 08:05:18 /=125063MB;921142;951847;0;1023492
主要是对load1=0.010;10.000;20.000;0; load5=0.020;10.000;20.000;0; load15=0.050;10.000;20.000;0;处理
load1 相当于key
0.010;10.000;20.000;0;相当于value
首先创建两个函数一个是key处理,一个是value处理
key处理函数
CREATE DEFINER=`root`@`192.168.*.*` FUNCTION `getPerfKey`(perf_data text,perf_length int) RETURNS text CHARSET utf8 BEGIN #Routine body goes here... DECLARE perfdata text; DECLARE perflength INT; DECLARE allresult text; SET perfdata = perf_data; SET perflength = perf_length; IF perflength = 1 THEN SELECT substring_index( substring_index( substring_index( perfdata, \' \', 1 ), \';\', 1 ), \'=\' ,1 ) into allresult; end if; IF perflength = 2 THEN SELECT substring_index( substring_index( SUBSTRING_INDEX( substring_index( perfdata, \' \' ,2 ), \' \', -1 ), \';\', 1 ), \'=\' ,1 ) into allresult; end if; IF perflength = 3 THEN SELECT substring_index( substring_index( SUBSTRING_INDEX( substring_index( perfdata, \' \' ,3 ), \' \', -1 ), \';\', 1 ), \'=\' ,1 ) into allresult; end if; RETURN allresult; END
value处理函数
CREATE DEFINER=`root`@`192.168.*.*` FUNCTION `getPerfValue`(perf_data text,perf_length int) RETURNS text CHARSET utf8 BEGIN #Routine body goes here... DECLARE perfdata text; DECLARE perflength INT; DECLARE allresult text; SET perfdata = perf_data; SET perflength = perf_length; IF perflength = 1 THEN SELECT substring_index( substring_index( substring_index( perfdata, \' \', 1 ), \';\', 1 ), \'=\' ,-1 ) into allresult; end if; IF perflength = 2 THEN SELECT substring_index( substring_index( SUBSTRING_INDEX( substring_index( perfdata, \' \' ,2 ), \' \', -1 ), \';\', 1 ), \'=\' ,-1 ) into allresult; end if; IF perflength = 3 THEN SELECT substring_index( substring_index( SUBSTRING_INDEX( substring_index( perfdata, \' \' ,3 ), \' \', -1 ), \';\', 1 ), \'=\' ,-1 ) into allresult; end if; RETURN allresult; END
调用函数
SELECT nagios_hosts.display_name, nagios_services.display_name, nagios_servicechecks.end_time, getPerfKey(nagios_servicechecks.perfdata,1), getPerfValue(nagios_servicechecks.perfdata,1), getPerfKey(nagios_servicechecks.perfdata,2), getPerfValue(nagios_servicechecks.perfdata,2), getPerfKey(nagios_servicechecks.perfdata,3), getPerfValue(nagios_servicechecks.perfdata,3) FROM nagios_hosts LEFT JOIN nagios_services ON nagios_hosts.host_object_id = nagios_services.host_object_id LEFT JOIN nagios_servicechecks ON nagios_services.service_object_id = nagios_servicechecks.service_object_id WHERE nagios_hosts.display_name = \'192.168.*.*\' AND nagios_services.display_name = \'101_CPU_load\';
以上是关于mysql自定义函数实现数据正则处理的主要内容,如果未能解决你的问题,请参考以下文章
实现一个MySQL自定义函数:求两个JSONArray的并集