0

tomcat のアクセス ログからの行を次に示します。

127.0.0.1 - - [24/May/2016:17:53:05 -0700] "POST /users HTTP/1.1" 200 10676

クライアント IP、HTTP リクエスト メソッド、リクエスト パス、レスポンス コードなどのさまざまなフィールドを解析して、BigQuery テーブルの個別の列に読み込む方法はありますか?

このページの下部にある表は流暢な catch-all configにリンクしていますが、クエリを簡単にするために、構成可能な方法でさまざまなログを解析して別の方法でロードする必要があると思いますか?

それとも、ここで基本的な何かが欠けていますか?

4

2 に答える 2

3

それはあなたが言っていることではないかもしれませんが、ただ推測してください:

ログを GBQ テーブルにロードして、各ログ行がテーブルの行になるようにし、以下のような方法で別のテーブルに解析するのはどうですか (コードは最適であるとは限りません - アイデアを示すためだけに)

SELECT 
  REGEXP_EXTRACT(log_line, r'(?: (?:.+?)){0} (.+?) '),
  REGEXP_EXTRACT(log_line, r'(?: (?:.+?)){1} (.+?) '),
  REGEXP_EXTRACT(log_line, r'(?: (?:.+?)){2} (.+?) '),
  REGEXP_EXTRACT(log_line, r'(?: (?:.+?)){3} (.+?) '),
  REGEXP_EXTRACT(log_line, r'(?: (?:.+?)){4} (.+?) '),
  REGEXP_EXTRACT(log_line, r'(?: (?:.+?)){5} (.+?) '),
  REGEXP_EXTRACT(log_line, r'(?: (?:.+?)){6} (.+?) '),
  REGEXP_EXTRACT(log_line, r'(?: (?:.+?)){7} (.+?) '),
  REGEXP_EXTRACT(log_line, r'(?: (?:.+?)){8} (.+?) '),
  REGEXP_EXTRACT(log_line, r'(?: (?:.+?)){9} (.+?) '),
FROM (
  SELECT ' ' + REGEXP_REPLACE(log_line, r'[\[\]\"]', '') + ' ' AS log_line 
  FROM 
    (SELECT '127.0.0.1 - - [24/May/2016:17:53:05 -0700] "POST /users HTTP/1.1" 200 10676' AS log_line)
)
于 2016-06-02T18:51:29.053 に答える