Goal:
Parse the SQL statement to get the SQL type from master log -- such as SELECT, UPDATE, COPY, DELETE, etc.You need to firstly create an external table(named "masterlog_ext") based on master logs, please refer to here.
Solution:
create temp table tmp_logminer_openkb as select logtime,loguser,logdatabase,logmessage, upper( substring( regexp_replace( substring( regexp_replace( regexp_replace( regexp_replace( regexp_replace(logmessage,E'--[^\n]*(\\n|$)','','g') --remove all the comment between ""--"" and ""new line"" , E'\\n\\s*\\n','','g') --remove ALL-SPACE/empty line , E'\\s+',' ','g') --remove junk spaces ,'BEGIN TRANSACTION;','','i') --remove ""begin transaction;"" , 1, 50 ) --get the first 50 characters , E'((statement:)|(execute.*:))((\\n)|(\\s))*', '' ,'i' ) --remove strings before "":"" from E'(^\\w+)(\\s|\\n)+') --get the first characters as data type ) --change it to upper case sql_type from masterlog_ext where logmessage !~ 'duration:' and logseverity='LOG' and (logmessage like 'execute %' or logmessage like 'statement:%') and regexp_replace(logmessage,E'((statement:)|(execute.*:))((\\n)|(\\s))*', '' ,'i' ) !~* '^(begin|commit|end transaction|rollback|start transaction|;)' and regexp_replace(logmessage,E'((statement:)|(execute.*:))((\\n)|(\\s))*', '' ,'i' ) <> '' and logdatabase <> 'gpperfmon' distributed by (logtime) ;
No comments:
Post a Comment