[ https://issues.apache.org/jira/browse/DRILL-3423?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14649894#comment-14649894 ]
Niels Basjes commented on DRILL-3423: ------------------------------------- I took a quick stab at the addAsParseTarget method (didn't even run it or test this) to show you how to use the casting options that the parser has built in. Effectively I would move the mappings out into a property file and then do{code} EnumSet<Casts> casts = parser.getCasts(path); if (casts.contains(Casts.DOUBLE)) { add(parser, path, writer.rootAsMap().map(mapping.key()).float8(mapping.value())); } else if (casts.contains(Casts.LONG)) { add(parser, path, writer.rootAsMap().map(mapping.key()).bigInt(mapping.value())); } else { add(parser, path, writer.rootAsMap().map(mapping.key()).varChar(mapping.value())); } {code} Here is the entire snippet I hacked at {code} private void addParseTargetMapping(Map<String,Pair<String,String>> mappings, String path, String map, String name){ mappings.put(path, new Pair<String,String>(map, name)); } public void addAsParseTarget(Parser<ComplexWriterFacade> parser) { try { Map<String,Pair<String,String>> mappings = new HashMap<>(); // TODO: Move this to a property file addParseTargetMapping(mappings, "NUMBER:connection.keepalivecount", "client","keepalivecount"); addParseTargetMapping(mappings, "NUMBER:connection.client.logname" ,"request","logname"); addParseTargetMapping(mappings, "STRING:request.errorlogid" ,"request","errorlogid"); addParseTargetMapping(mappings, "HTTP.METHOD:request.method" ,"request","method"); addParseTargetMapping(mappings, "PORT:request.server.port.canonical" ,"server","canonical_port"); addParseTargetMapping(mappings, "PORT:connection.server.port.canonical" ,"server","canonical_port"); addParseTargetMapping(mappings, "PORT:connection.client.port" ,"client","port"); addParseTargetMapping(mappings, "NUMBER:connection.server.child.processid" ,"server","process_id"); addParseTargetMapping(mappings, "NUMBER:connection.server.child.threadid" ,"server","thread_id"); addParseTargetMapping(mappings, "STRING:connection.server.child.hexthreadid" ,"connection","hex_thread_id"); addParseTargetMapping(mappings, "HTTP.QUERYSTRING:request.querystring" ,"",""); addParseTargetMapping(mappings, "HTTP.FIRSTLINE:request.firstline" ,"",""); addParseTargetMapping(mappings, "STRING:request.handler" ,"request","handler"); addParseTargetMapping(mappings, "STRING:request.status.original" ,"request","status_original"); addParseTargetMapping(mappings, "STRING:request.status.last" ,"request","status_last"); addParseTargetMapping(mappings, "TIME.STAMP:request.receive.time" ,"request","timestamp"); addParseTargetMapping(mappings, "TIME.EPOCH:request.receive.time.begin.msec" ,"request","begin_msec"); addParseTargetMapping(mappings, "TIME.EPOCH:request.receive.time.end.msec" ,"request","end_msec"); addParseTargetMapping(mappings, "TIME.EPOCH.USEC:request.receive.time.begin.usec" ,"request","begin_usec"); addParseTargetMapping(mappings, "TIME.EPOCH.USEC:request.receive.time.end.usec" ,"request","end_usec"); addParseTargetMapping(mappings, "TIME.EPOCH:request.receive.time.begin.msec_frac" ,"request","begin_msec_frac"); addParseTargetMapping(mappings, "TIME.EPOCH:request.receive.time.end.msec_frac" ,"request","end_msec_frac"); addParseTargetMapping(mappings, "TIME.EPOCH.USEC_FRAC:request.receive.time.begin.usec_frac" ,"request","begin_usec_frac"); addParseTargetMapping(mappings, "TIME.EPOCH.USEC_FRAC:request.receive.time.end.usec_frac" ,"request","end_usec_frac"); addParseTargetMapping(mappings, "SECONDS:response.server.processing.time" ,"response","processing_time"); addParseTargetMapping(mappings, "STRING:connection.client.user" ,"client","user"); addParseTargetMapping(mappings, "URI:request.urlpath" ,"request","url"); addParseTargetMapping(mappings, "STRING:connection.server.name.canonical" ,"server","canonical_name"); addParseTargetMapping(mappings, "STRING:connection.server.name" ,"server","name"); addParseTargetMapping(mappings, "HTTP.CONNECTSTATUS:response.connection.status" ,"response","connection_status"); addParseTargetMapping(mappings, "BYTES:request.bytes" ,"request","bytes"); addParseTargetMapping(mappings, "BYTES:response.bytes" ,"response","bytes"); addParseTargetMapping(mappings, "HTTP.COOKIES:request.cookies" ,"request","cookies"); addParseTargetMapping(mappings, "HTTP.SETCOOKIES:response.cookies" ,"response","cookies"); addParseTargetMapping(mappings, "HTTP.USERAGENT:request.user-agent" ,"request","useragent"); addParseTargetMapping(mappings, "HTTP.URI:request.referer" ,"request","referer"); addParseTargetMapping(mappings, "HTTP.METHOD:method" ,"request","method"); addParseTargetMapping(mappings, "HTTP.URI:uri" ,"request","uri"); addParseTargetMapping(mappings, "HTTP.PROTOCOL:protocol" ,"request","protocol"); addParseTargetMapping(mappings, "HTTP.PROTOCOL.VERSION:protocol.version" ,"request","protocol_version"); addParseTargetMapping(mappings, "HTTP.METHOD:request.firstline.method" ,"request","method"); addParseTargetMapping(mappings, "HTTP.URI:request.firstline.uri" ,"request","uri"); addParseTargetMapping(mappings, "HTTP.PROTOCOL:request.firstline.protocol" ,"request","protocol"); addParseTargetMapping(mappings, "HTTP.PROTOCOL.VERSION:request.firstline.protocol.version" ,"request","protocol_version"); for (final String path : parser.getPossiblePaths()) { EnumSet<Casts> casts = parser.getCasts(path); Pair<String, String> mapping = mappings.get(path); if (mapping == null) { final String noPeriodPath = path.replace(".", "_"); if (casts.contains(Casts.DOUBLE)) { add(parser, path, writer.rootAsMap().float8(noPeriodPath)); } else if (casts.contains(Casts.LONG)) { add(parser, path, writer.rootAsMap().bigInt(noPeriodPath)); } else { add(parser, path, writer.rootAsMap().varChar(noPeriodPath)); } } else { if (casts.contains(Casts.DOUBLE)) { add(parser, path, writer.rootAsMap().map(mapping.key()).float8(mapping.value())); } else if (casts.contains(Casts.LONG)) { add(parser, path, writer.rootAsMap().map(mapping.key()).bigInt(mapping.value())); } else { add(parser, path, writer.rootAsMap().map(mapping.key()).varChar(mapping.value())); } } } } catch (MissingDissectorsException | SecurityException | NoSuchMethodException | InvalidDissectorException e) { throw handleAndGenerate("Failure while setting up log mappings.", e); } } } } {code} > Add New HTTPD format plugin > --------------------------- > > Key: DRILL-3423 > URL: https://issues.apache.org/jira/browse/DRILL-3423 > Project: Apache Drill > Issue Type: New Feature > Components: Storage - Other > Reporter: Jacques Nadeau > Assignee: Jacques Nadeau > Fix For: 1.2.0 > > > Add an HTTPD logparser based format plugin. The author has been kind enough > to move the logparser project to be released under the Apache License. Can > find it here: > <dependency> > <groupId>nl.basjes.parse.httpdlog</groupId> > <artifactId>httpdlog-parser</artifactId> > <version>2.0</version> > </dependency> > -- This message was sent by Atlassian JIRA (v6.3.4#6332)