CloudLoggingのWebコンソールからBigQueryに簡単にエクスポートの設定ができます。
こういうときはtextPayload
を分割するViewを作っておくと便利。
-- use regacy sqlはoff
SELECT
REGEXP_EXTRACT(textPayload,r'^(?:[^\t]*\t){0}([^\t]*).*') AS field1,
REGEXP_EXTRACT(textPayload,r'^(?:[^\t]*\t){1}([^\t]*).*') AS field2,
REGEXP_EXTRACT(textPayload,r'^(?:[^\t]*\t){2}([^\t]*).*') AS field3,
...
FROM
`projectname.datasetname.somelogs_*`
;
Use regacy SQL
のチェックを外しておくと*
でテーブルをワイルドカード指定できるので、CloudLoggingが自動的に日ごとにテーブル分割したログをまとめられます。
課題
BigQueryのクエリは「処理したデータ量」(Query complete (13.1s elapsed, 32.4 MB processed)
の32.4MBの部分)に応じて課金ます。インデックスはなく常に全レコードのフルスキャンなので、なるべく条件を減らして参照するカラムを減らしたほうが安く済みます。
料金 | BigQuery のドキュメント | Google Cloud Platform
https://cloud.google.com/bigquery/pricing?hl=ja
上のようにtextPayloadからtsvにするviewを使っているとクエリを投げるたびにtextPayload内が全て読まれるため、無駄です(例えばfield1がhogehogeのときのfield2のcount distinctが欲しい時など)。
なのでデータ量が多いなら予めちゃんとtsvと同じ構造のテーブルにログを入れておいたほうがよいです。
Destination Tableを使うと楽に実現できそうなので今後試します。