bigquery
gcp

BigQuery標準SQLで期間を指定してAppEngineのログを検索する

More than 1 year has passed since last update.

背景

私は普段AppEngineでWebアプリを作っていますが、ログはStackDriver LoggingからBigQueryへストリーミングインポートさせています。
3ヶ月ほど前のログを漁りたくなり、当然StackDriver側には残っていないためBigQueryを探したのですが書き方が割と面倒だったので備忘としてここに残します。
(私はSQLが殆どわかりませんので、DBAの方にとっては当たり前なのかもしれません……)

クエリー内容

timestampのカラムに対してWHEREする際、FORMAT_TIMESTAMP()で好きな形のテキストに直してからそれに対してBETWEENで範囲を指定します。
2017年9月16日の05:00:00〜07:00:00までのログが欲しい場合、以下のようになります。

SELECT
  *
FROM
  `appengine_request.appengine_googleapis_com_request_log_2017091*`
WHERE
  FORMAT_TIMESTAMP("%F %T", timestamp, "+09:00")
  BETWEEN "2017-09-16 05:00:00" AND "2017-09-16 07:00:00"
ORDER BY
  timestamp ASC

注意点

  • BigQueryの基本ですが、今回はログ量がそう多くない事が予めわかっていたのであまり気にせずSELECT *にしました。大量のログがある合はスキャンの課金が嵩まないように絞りましょう
    • FROMの参照範囲も今回はいい加減に絞ったのでこれと同様
  • AppEngineから流し込むとtimestampはUTCで記録されているので "+09:00" を付けて調整します

備考

  • アドホックなクエリーなのでBigQueryのWeb画面からクエリーを流しました