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