首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在同一表达式中重新排序RegEx捕获组

在同一表达式中重新排序RegEx捕获组
EN

Stack Overflow用户
提问于 2021-04-06 17:07:50
回答 1查看 93关注 0票数 0

我有带有这个时间戳格式的日志文件: 04/Apr/2021:12:21:24 +0000

此RegEx与此格式匹配:

代码语言:javascript
复制
\[([0-9]{2})\/([A-Za-z]{3})\/([0-9]{4}):([0-9]{2}:[0-9]{2}:[0-9]{2}) ([+-][0-9]{4})\]

是否可以添加以下修改此表达式的内容?

  1. 通过重新排序捕获的组

,将日期重新排序到YYYY。

  1. 将月份缩写更改为等效月份数(4月至2004年)

使用日志中的日期/时间作为SQL时间戳列键的输入,需要这些更改将快速日志导入AWS雅典娜数据库。

我搜索了所有的Google和Stack溢出,但只发现替代作为一个单独的表达式。

任何帮助都是非常感谢的,谢谢!

更新:这是我的Athena Create语句,我的正则表达式用于填充快速日志中的数据。

代码语言:javascript
复制
create external table if not exists logsdb.service_logs_2021_04_04
(
   `syslog_prefix`            string,
   `remote_ip_address`        string,
   `dashes`                   string,
   `timestamp`                timestamp,
   `url_request`              string,
   `final_status_code`        smallint,
   `response_size`            int,
   `fastly_datacenter`        string,
   `fastly_cache_state`       string,
   `client_ip_address`        string,
   `client_geo_location`      string
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES
(
   'serialization.format' = '1',
   'input.regex' = '^(.+]:) ([0-9.]+) ("-" "-") \\[([0-9]{2})\/([A-Za-z]{3})\/([0-9]{4}):([0-9]{2}:[0-9]{2}:[0-9]{2}) ([+-][0-9]{4})\\] \"(.+?)\" ([0-9]{3}) ([0-9]+) ([A-Za-z]+) ([A-Za-z-]+) ([0-9.]+) ([A-Za-z ]+)$'
)
LOCATION 's3://weblog-query-source/service-logs/2021-04-04/'
TBLPROPERTIES ('has_encrypted_data'='false')
EN

回答 1

Stack Overflow用户

发布于 2021-04-06 19:15:18

绕过复杂正则表达式的一个简单方法是使用SELECT查询转换值。例如:

代码语言:javascript
复制
select date_format(date_parse('04/Apr/2021:12:21:24', '%d/%b/%Y:%T%'), '%Y-%m-%d')

输出:2021-04-04

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66973265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档