syslog/errorlog的regex

kadbb459  于 2021-06-27  发布在  Hive
关注(0)|答案(1)|浏览(342)

我想使用athena查询系统日志(基本上是我的sql错误日志)。这是我的样本数据。

2019-09-21T12:19:32.107Z 2019-09-21 12:19:24.17 Server      Buffer pool extension is already disabled. No action is necessary. 

2019-09-21T12:19:32.107Z 2019-09-21 12:19:24.29 Server      InitializeExternalUserGroupSid failed. Implied authentication will be disabled.

所以我创建了这样一个表:

CREATE EXTERNAL TABLE IF NOT EXISTS bhuvi (
  timestamp string,
  date string,
  time string,
  user string,
  message stringg
 ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
 WITH SERDEPROPERTIES (
 "input.regex" = "(\\w+)\\s+(.*\\-.*\\-.*)\\s+(\\d+:\\d+:\\d+.\\d+)\\s+(\\w+)\\s+(\\w+)"
 ) LOCATION 's3://log/sql_error_log_stream/';

但没有任何结果。有人能帮我弄清楚吗?

dkqlctbz

dkqlctbz1#

很少观察到:
时间戳 '2019-09-21T12:19:32.107Z' 不在Hive里 TIMESTAMP 格式,定义为 STRING 在ddl和convert中,如下所示:https://stackoverflow.com/a/23520257/2700344
serde中的消息表示为(\w+)组。这是错误的,因为消息包含空格。尝试 (.*?)$ 而不是 (\\w+) 用于消息字段。
尝试此regexp: (\\S+)\\s+(.*-.*-.*)\\s+(\\d+:\\d+:\\d+\\.\\d+)\\s+(\\S+)\\s+(.*?)$ 使用 (\\S+) -这意味着除了空间之外的一切。 (\\w+) 不适用于第一组,因为 \\w 只匹配任何字母数字字符和下划线,第一组(时间戳)包含 - 以及 : 人物也是。
也连字符 - 如果字符类之外[方括号中]不需要屏蔽。还有点。具有特殊含义,当用作点时需要屏蔽:https://stackoverflow.com/a/57890202/2700344

相关问题