RegEx创建AWS Athena表(RegexSerDe)

RegEx创建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 '')

我试图根据存储在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 '')
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阅读这个问题: