首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将weblog正确导入蜂巢的Regex

将weblog正确导入蜂巢的Regex
EN

Stack Overflow用户
提问于 2014-06-27 03:29:26
回答 1查看 191关注 0票数 0

我正试图想出一个正则表达式,以便可以将weblog导入到Hive中。我不是regex专家,我遇到了一些问题,试图用不同的元数据处理日志中的两种不同的事务类型。

日志包含一个请求和一个Reply事务,regex我已经为请求事务提供了支持,但是在回复上失败了,因为答复中包含了数据中的“心跳”。日志每天可以包含多达两万个或更多条目。

我的Regex到目前为止

代码语言:javascript
复制
    (^[0-9]*) ([0-9]*) ([0-9]*) ([0-9]*) ([0-9]*) ([^ ]*) ([^ ]*)   ([^ ]*)   ([0-9]*) ([0-9]*) ([0-9]*) ([^ ]*)(?:[:]) ([0-9]+.[0-9]+(?:\ms)) ([^ ]*)(?:[:]) (.*)\n

预期结果:

  1. regex必须处理答复中的心跳数据,而请求中不处理任何数据。
  2. 在数据中,我不希望在事务类型结束和SessionKey结束时导入':‘冒号。我实现的正则表达式似乎排除了它,但我不确定它是否正确。
  3. 在心跳响应中,在消息中返回时间戳和'ms‘毫秒,最初的单词'ms’是要导入的,如上面的regex所示,但是现在我需要将它从导入中排除,并且我有问题要排除正确的表达式。

博客示例:

请求事务:

样本数据

代码语言:javascript
复制
0 20140625095038864 20140625095038864 0000 006 00/0000/000 LSEMPPRD   Nestra   000 000000 00 Request: fafe805e-614e-41dd-9b0f-8ec5fbc8c882

结构:

代码语言:javascript
复制
Version = 0 
EventTime = 20140625095038864 
LogTime = 20140625095038864 
SequenceNumber = 0000 
Level = 006 
InternalArea = 00/0000/000 
MachineName = LSEMPPRD   
ApplicationName = Nestra   
DiscardedMessageCount = 000 000000 00 
TranType = Request: 
SessionKey = fafe805e-614e-41dd-9b0f-8ec5fbc8c882
Message = <GetAccountInfo xmlns="http://tempuri.org/"><accountSession     xmlns:b="http://schemas.datacontract.org/2004/07/ApplicationServices.DataContracts.Common" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><b:SessionKey>8c737876-fccb-4352-8d06-9f19ccb34fd6</b:SessionKey><b:SessionToken i:nil="true"></b:SessionToken></accountSession></GetAccountInfo>

回复事务:

样本数据

代码语言:javascript
复制
0 20140625095038615 20140625095038646 0000 006 00/0000/000 LSEMPPRD   Nestra   000 000000 00 Reply: 296.4057ms d594891a-6d9c-4b5c-913a-9dc302277534:

结构:

代码语言:javascript
复制
Version = 0 
EventTime = 20140625095038615 
LogTime = 20140625095038646 
SequenceNumber = 0000 
Level = 006 
InternalArea = 00/0000/000 
MachineName = LSEMPPRD  
ApplicationName = Nestra   
DiscardedMessageCount = 000 000000 00 
TranType = Reply: 
Heartbeat = 296.4057ms 
SessionKey = d594891a-6d9c-4b5c-913a-9dc302277534:
Message = <GetAccountInfo xmlns="http://tempuri.org/"><accountSession xmlns:b="http://schemas.datacontract.org/2004/07/ApplicationServices.DataContracts.Common" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><b:SessionKey>8c737876-fccb-4352-8d06-9f19ccb34fd6</b:SessionKey><b:SessionToken i:nil="true"></b:SessionToken></accountSession></GetAccountInfo>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-27 07:01:53

在这里找到答案:

注意:确保使用的空格。使用前在球状中进行测试

Regex:

代码语言:javascript
复制
(^[0-9]*) ([0-9]*) ([0-9]*) ([0-9]*) ([0-9]*) ([^ ]*) ([^ ]*)   ([^ ]*)   ([0-9]*) ([0-9]*) ([0-9]*) ([^ ]*)(?:[:]) ([0-9]+.[0-9]+|)(?:ms |)([^ ]*)(?:[:])

数据:2行

代码语言:javascript
复制
0 20140625095038864 20140625095038864 0000 006 00/0000/000 LSEMPPRD   Nestra   000 000000 00 Request: fafe805e-614e-41dd-9b0f-8ec5fbc8c882:
0 20140625095038615 20140625095038646 0000 006 00/0000/000 LSEMPPRD   Nestra   000 000000 00 Reply: 296.4057ms d594891a-6d9c-4b5c-913a-9dc302277534:

Regex:(完成-处理消息部分)-只需在末尾添加:(.*$)

代码语言:javascript
复制
(^[0-9]*) ([0-9]*) ([0-9]*) ([0-9]*) ([0-9]*) ([^ ]*) ([^ ]*)   ([^ ]*)   ([0-9]*) ([0-9]*) ([0-9]*) ([^ ]*)(?:[:]) ([0-9]+.[0-9]+|)(?:ms |)([^ ]*)(?:[:]) (.*$)

验证:球状

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

https://stackoverflow.com/questions/24443488

复制
相关文章

相似问题

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