regex pour journal d'accès dans la ruche serde
Je veux extraire (ip, requestUrl, timeStamp) à partir des journaux d'accès de charge à la ruche de la base de données. Une ligne de log d'accès est comme suit.
66.249.68.6 - - [14/Jan/2012:06:25:03 -0800] "GET /example.com HTTP/1.1" 200 708 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
J'ai essayé avec la suite et de nombreuses variations de regex, sans succès. (Le chargement de la table est avec toutes les valeurs NULL indiquant la regex ne correspond pas à l'entrée).
CREATE TABLE access_log (
remote_ip STRING,
request_date STRING,
method STRING,
request STRING,
protocol STRING
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
"input.regex" = "([^ ]) . . [([^]]+)] \"([^ ]) ([^ ]) ([^ \"])\" *",
"output.format.string" = "%1$s %2$s %3$s %4$s %5$s"
)
STORED AS TEXTFILE;
Je ne suis pas très expérimenté, avec des regex. Quelqu'un peut-il m'aider?
Vous devez vous connecter pour publier un commentaire.
- Je utiliser rubular pour tester ma regex.
Vous pouvez également utiliser cette expression
Vous obtenez le résultat suivant
Double '\' et '.*' à la fin (c'est important!):
P. S. Ruche 0.7.1
Pas infaillible, mais étant donné que c'est un fichier journal dans un format connu alors la suivante devrait fonctionner (non testé dans la Ruche, mais fonctionne avec
grep -E
et avec http://www.regexplanet.com/simple/index.html si vous remplacez[^[]
avec[^\[]
et[^]]
avec[^\]]
). Suppose que vous ne voulez les trois valeurs qui vous sont spécifiquement mentionnés.