如何regex apache日志日期和时间到配置单元

yacmzcpb  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(503)

我想把我的日志文件放到一个Hive里(亚马逊雅典娜)
我的正则表达式没问题,测试人员说:https://regex101.com/r/hf4fp8/11
我的创建表如下:

CREATE EXTERNAL TABLE IF NOT EXISTS webservicelogs.Test15 (
         `day` int,
         `month` string,
         `year` int,
         `hour` int,
         `minute` int,
         `second` int,
         `offset` string 
) 
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES ('input.regex' = '\[(\d{2})\/([a-zA-Z]{3})\/(\d{4}):(\d{2}):(\d{2}):(\d{2})\s(\+\d{4})]' ) 
LOCATION 's3://getag-athena/Test/' 
TBLPROPERTIES ('has_encrypted_data'='false')

CREATETABLE语句起作用
如果要选择表,则会发生此错误

SELECT * FROM "webservicelogs"."test15" limit 10;

您的查询有以下错误:

HIVE_CURSOR_ERROR: Number of matching groups doesn't match the number of columns

我要分析的日志文件如下:

85.239.101.101 - - [07/Jan/2016:01:00:00 +0100] "POST /bpwsortsinfo1-3/services/Ortsinfo?wsdl HTTP/1.1" 200 467 "-" "Axis2" 449/1883 23 BP7 0
hec6srdp

hec6srdp1#

我自己回答了,还有同事的帮助
所有的ses都必须用另一个反斜杠转义,更好:转义的所有特殊字符都必须是双转义的这是java的东西

(.*)\\s(.*)\\s(.*)\\s\\[(\\d{2})\\/([a-zA-Z]{3})\\/(\\d{4}):(\\d{2}):(\\d{2}):(\\d{2})\\s(\\+\\d{4})].*?$

相关问题