2014-06-27 56 views
0

我試圖想出一個正則表達式,以便我可以使用將weblogs導入到Hive中。我不是正則表達式專家,我有問題試圖處理具有不同元數據的日誌中的兩種不同的事務類型。正則表達式將weblogs導入到Hive中正確

日誌包含一個請求和一個回覆事務,我提出的正則表達式迎合了請求事務,但在回覆上失敗,因爲回覆包含數據中的「心跳」。 日誌每天最多可包含兩萬或更多條目。

我正則表達式到目前爲止

(^[0-9]*) ([0-9]*) ([0-9]*) ([0-9]*) ([0-9]*) ([^ ]*) ([^ ]*) ([^ ]*) ([0-9]*) ([0-9]*) ([0-9]*) ([^ ]*)(?:[:]) ([0-9]+.[0-9]+(?:\ms)) ([^ ]*)(?:[:]) (.*)\n 

預期結果:

  1. 正則表達式要處理的請求
  2. 在數據中回覆心跳數據,沒有數據,我不想在Transaction類型的末尾和SessionKey的末尾導入':'冒號。我在上面實現的正則表達式似乎排除它,但我不確定它是否正確。
  3. 在Heartbeat響應中,消息中返回一個時間戳和'ms'毫秒,最初單詞'ms'將被導入,如上面的正則表達式所示,但現在我需要將它從導入中排除,而I我有問題得到正確的表達,以排除

博客的例子:

請求事務:

樣本數據

0 20140625095038864 20140625095038864 0000 006 00/0000/000 LSEMPPRD Nestra 000 000000 00 Request: fafe805e-614e-41dd-9b0f-8ec5fbc8c882 

結構:

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> 

應答事務:

樣本數據

0 20140625095038615 20140625095038646 0000 006 00/0000/000 LSEMPPRD Nestra 000 000000 00 Reply: 296.4057ms d594891a-6d9c-4b5c-913a-9dc302277534: 

結構:

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> 
+0

? –

+0

是的,我打算通過Create table語句將數據加載到配置單元中,我只需要爲「input.regex」獲取正確的正則表達式。 – user3065587

+0

好了! PLZ找到答案,並接受,如果它解決您的需要 –

回答

0

這裏找到了答案:

注:確保關於所使用的空間。測試在rubular使用前

正則表達式:

(^[0-9]*) ([0-9]*) ([0-9]*) ([0-9]*) ([0-9]*) ([^ ]*) ([^ ]*) ([^ ]*) ([0-9]*) ([0-9]*) ([0-9]*) ([^ ]*)(?:[:]) ([0-9]+.[0-9]+|)(?:ms |)([^ ]*)(?:[:]) 

數據:2行

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: 

正則表達式:(完全 - 來處理消息部分也) - 只需添加在端:(* $)

(^[0-9]*) ([0-9]*) ([0-9]*) ([0-9]*) ([0-9]*) ([^ ]*) ([^ ]*) ([^ ]*) ([0-9]*) ([0-9]*) ([0-9]*) ([^ ]*)(?:[:]) ([0-9]+.[0-9]+|)(?:ms |)([^ ]*)(?:[:]) (.*$) 

enter image description here

驗證:rubular enter image description here enter image description here

要存儲的請求和響應數據到同一個表
+0

嗨Ramisetty,謝謝你的迴應,我測試了正則表達式,它返回的數據按預期分解。我忘記包含在我的數據示例中的一個問題是最後的'Message ='部分。我包含在上面示例的結構部分中,我需要將所有數據以字符串的形式導入到一個列中,以便通過Xpath查詢xml數據。你能幫助正則表達式的最後一部分嗎? – user3065587

+0

已更新! plz找到並接受相同的,如果發現有用 –

+0

非常感謝ramisetty.vijay您的及時響應,您的答案正是我所尋找的。 – user3065587