RegEx创建AWS Athena表(RegexSerDe)
我试图根据存储在S3中的日志创建AWS Athena表。我打算使用RegEx创建表,但找不到适合我的RegExRegEx创建AWS Athena表(RegexSerDe),regex,hiveql,amazon-athena,hiveddl,regexserde,Regex,Hiveql,Amazon Athena,Hiveddl,Regexserde,我试图根据存储在S3中的日志创建AWS Athena表。我打算使用RegEx创建表,但找不到适合我的RegEx CREATE EXTERNAL TABLE `dev_logs`( `date_time` string COMMENT '', `type` string COMMENT '', `request_id` string COMMENT '', `body` string COMMENT '', `exception` string COMMENT '')
CREATE EXTERNAL TABLE `dev_logs`(
`date_time` string COMMENT '',
`type` string COMMENT '',
`request_id` string COMMENT '',
`body` string COMMENT '',
`exception` string COMMENT '')
ROW FORMAT SERDE
'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
'input.regex'='\\[([^ ]* +[^ ]*)\\] \\[([^ ]*)\\] ([^ ]*) \\[([^ ]* +[^ ]*)\\] (\\*)'
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
's3://dev/logs'
日志采用这种格式
[2020-05-04 10:26:56.393] [INFO] [123] [Building host...] []
[2020-05-04 10:27:01.623] [INFO] [] [Starting Service checks...] [exception details]
正则表达式是
'\\[(\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}\\.\\d*)\\] \\[(.*?)\\] \\[(.*?)\\] \\[(.*?)\\] \\[(.*?)\\].*?$'
在配置单元中,您可以使用regexp\u replace轻松调试它:
select regexp_replace('[2020-05-04 10:26:56.393] [INFO] [123] [Building host...] []',
'\\[(\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}\\.\\d*)\\] \\[(.*?)\\] \\[(.*?)\\] \\[(.*?)\\] \\[(.*?)\\].*?$',
'$1, $2, $3, $4, $5')
结果
2020-05-04 10:26:56.393,信息,123,建筑主机…,主体字段是多行的。如何取回所有的文件content@Moin阅读这个问题: