2017-03-09 2 views
1

私は現在、例えば行(SQL-アテナ)

で私たちのwebserverlogからのメッセージを分割するに取り組んでいます: 私のメッセージ(データ型string)は次のようになります。

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のAmazon Athena上で(初めての)関数であり、既に文字列から数行を取得していますが、いくつかの行で苦労しています。

私は例えば、私が

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

セバスチャンのコメントを参考にして、私は\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 
関連する問題