正则表达式创建 AWS Athena 表 (RegexSerDe)
Posted
技术标签:
【中文标题】正则表达式创建 AWS Athena 表 (RegexSerDe)【英文标题】:RegEx to create AWS Athena Table (RegexSerDe) 【发布时间】:2020-06-24 10:11:41 【问题描述】:我正在尝试根据存储在 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]
【问题讨论】:
【参考方案1】:正则表达式是
'\\[(\\d4-\\d2-\\d2 \\d2:\\d2:\\d2\\.\\d*)\\] \\[(.*?)\\] \\[(.*?)\\] \\[(.*?)\\] \\[(.*?)\\].*?$'
在 Hive 中,您可以使用 regexp_replace 轻松调试它:
select regexp_replace('[2020-05-04 10:26:56.393] [INFO] [123] [Building host...] []',
'\\[(\\d4-\\d2-\\d2 \\d2:\\d2:\\d2\\.\\d*)\\] \\[(.*?)\\] \\[(.*?)\\] \\[(.*?)\\] \\[(.*?)\\].*?$',
'$1, $2, $3, $4, $5')
结果
2020-05-04 10:26:56.393,INFO,123,建筑主机...,
【讨论】:
正文字段是多行的。如何获取所有内容 @Moin 读到这个问题:***.com/q/17935200/2700344以上是关于正则表达式创建 AWS Athena 表 (RegexSerDe)的主要内容,如果未能解决你的问题,请参考以下文章
aws glue / pyspark - 如何使用 Glue 以编程方式创建 Athena 表
AWS Athena 使用填充错误数据的创建表从 Epoch 转换为时间戳
无法从 AWS Redshift 访问 AWS Athena 表