Athena:自定义Apache日志格式正则表达式问题

时间:2018-05-22 11:41:21

标签: amazon-athena

我有一个自定义格式的apache访问日志,其中包含以下行:

Jan  1 23:59:59 ip-172-70-12-5 172.70.1.146 - - [01/Jan/2018:23:59:59 +0000] "GET /someurl HTTP/1.1" 200 22854 "somdomain.com" "5a4acbvv7f7d222" "-" "" "Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10" 486029 "180.80.80.62"

在Athena中,我设置了一个表来使用正则表达式来处理它,这里是表DDL:

CREATE EXTERNAL TABLE `test_access_log`(
  `remoteaddr` string COMMENT '', 
  `remotelogname` string COMMENT '', 
  `user` string COMMENT '', 
  `day` string COMMENT '', 
  `month` string COMMENT '', 
  `year` string COMMENT '', 
  `request` string COMMENT '', 
  `status` string COMMENT '', 
  `bytes_string` string COMMENT '', 
  `tenant` string COMMENT '', 
  `xrequestid` string COMMENT '', 
  `userid` string COMMENT '', 
  `referrer` string COMMENT '', 
  `browser` string COMMENT '', 
  `requesttime` string COMMENT '', 
  `originatorip` string COMMENT '')
ROW FORMAT SERDE 
  'org.apache.hadoop.hive.serde2.RegexSerDe' 
WITH SERDEPROPERTIES ( 
  'input.regex'='(\\S+) (\\S+) (\\S+) \\[([0-9]*)\\/([a-zA-Z]*)\\/([0-9]*):[\\w:]+\\s[+\\-]\\d{4}\\] \\\"(.+?)\\\" (\\S+) (\\S+) \\\"([^\\\"]*)\\\" \\\"([^\\\"]*)\\\" \\\"([^\\\"]*)\\\" \\\"([^\\\"]*)\\\" \\\"([^\\\"]*)\\\" (\\S+) \\\"([^\\\"]*)\\\"$') 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  's3://mybucket/access-logs'
TBLPROPERTIES (
  'has_encrypted_data'='false', 
  'transient_lastDdlTime'='1526982859')

问题是此表上的预览会返回,每列显示一个空值。

我已经通过在线Java测试器测试了正则表达式,并且表达式正确地按预期返回所有16个元素。

如果我运行SELECT COUNT(*)FROM test_access_log,那么我按预期获得了我期望的行数,因此似乎可以在我的S3存储桶中加载文件。这让我觉得这是一个正则表达式问题。

任何想法正则表达式有什么问题?

0 个答案:

没有答案