2017-03-09 45 views
1

我目前正在對行如何devide一個字符串,每個空格REGEXP_EXTRACT(SQL-雅典娜)

例如從我們webserverlog拆分消息: 我的消息(數據類型的字符串)看起來是這樣的:

at=info method=GET path="/v1/..." host=web.com request_id=a3d71fa9-9501-4bfe-8462-54301a976d74 fwd="xxx.xx" dyno=web.1 connect=1ms service=167ms status=200 bytes=1114

,我想切到這些行:

path | service | connect | method | status | fwd  | dyno | 
------ | ------- | -------- | ------ | ------ | ------- | ------ | 
/v1/...| 167  | 1  | GET | 200 | xxx.xxx | web.1 | 

我與REGEXP_EXTRACT發揮各地函數(第一次)在標準SQL中的亞馬遜雅典娜上,並且已經從字符串中得到了幾行,但是我正在掙扎着幾行。

當我嘗試獲得例如切到了極致出字符串即時得到比我需要

REGEXP_EXTRACT (message,'dyno=[^,]+[a-z]')AS dyno 
-> dyno=web.2 connect=0ms service=192ms status=200 bytes 

我想有dyno=web.1結果&然後再提取

它會更多資訊如果我從開始(「dyno =」)將字符串剪切到「connect =」之前的空白處,但我無法在我讀取的網站中找到正確的選項,那就好了。

我如何編寫選項以獲取正確的字符串?

+1

你爲什麼用'[^,] +'在這裏嗎?從你的示例中,如果你的目標字符串不能包含空格或者'。*?(?= connect =)',我寧願使用'\ S +'。 –

+0

[^,] +在我之前製作的以前的行上工作過,所以我認爲它可以在其他東西上工作 –

+0

字符串中根本沒有逗號,所以'[^,]'是毫無意義的。 –

回答

1

對塞巴斯蒂安的評論Piggybagging,我同意\S+應該是前進的解決方案。因此,查詢應該是這樣的:

select REGEXP_EXTRACT (message,'dyno=(\S+)',1) AS dyno 
from (
    select 
    'at=info method=GET path="/v1/..." host=web.com request_id=a3d71fa9-9501-4bfe-8462-54301a976d74 fwd="xxx.xx" dyno=web.1 connect=1ms service=167ms status=200 bytes=1114' message 
) 
0

如果你沒有自己的價值觀內空間(如鍵值對),然後有一個簡單的解決方案。

select msg['at']   as "at" 
     ,msg['method']  as "method" 
     ,msg['path']  as "path" 
     ,msg['host']  as "host" 
     ,msg['request_id'] as "request_id" 
     ,msg['fwd']  as "fwd" 
     ,msg['dyno']  as "dyno" 
     ,msg['connect'] as "connect" 
     ,msg['service'] as "service" 
     ,msg['status']  as "status" 
     ,msg['bytes']  as "bytes" 

from (select split_to_map (message,' ','=') as msg  
     from mytable 
     ) 
; 

at | method | path | host |    request_id    | fwd | dyno | connect | service | status | bytes 
------+--------+-----------+---------+--------------------------------------+----------+-------+---------+---------+--------+------- 
info | GET | "/v1/..." | web.com | a3d71fa9-9501-4bfe-8462-54301a976d74 | "xxx.xx" | web.1 | 1ms  | 167ms | 200 | 1114 
相關問題