【问题标题】:How to regex Apache log date and time into Hive如何将 Apache 日志日期和时间正则表达式到 Hive
【发布时间】:2017-12-16 13:11:17
【问题描述】:

我想将我的日志文件放入配置单元(Amazon Athena)

我的正则表达式没问题,测试人员说: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')

create table 语句有效

如果我想选择表格,就会出现这个错误

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

【问题讨论】:

    标签: logging hive


    【解决方案1】:

    我自己和同事的帮助回答了

    所有的 \s ses 都必须用另一个反斜杠转义,更好的是:所有被转义的特殊字符都必须被双重转义,这是 java 的事情

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

    【讨论】:

      猜你喜欢
      • 2019-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-09
      • 1970-01-01
      • 1970-01-01
      • 2011-02-18
      • 1970-01-01
      相关资源
      最近更新 更多