😸

CloudStorage上のファイルをBigQueryでつかう

1 min read

GCS上のJSONファイルをBigQueryで分析した時のメモ。

(ただのメモだけどPublicにしておくデメリットがないので公開しておく)

やりたいこと

1hでローテートされたログがgs://your-gcs-bucket-name/logs/2021/04/01/01:00.jsonのように大量にあり、これをbqで分析したい。


ワイルドカードが使えると書いてあったが、gs://your-gcs-bucket-name/logs/**/*.json

みたいな指定ができなかったのでbqコマンドでテーブルを作った。(コンソールでポチポチやる作戦に失敗)

{
    "autodetect": false,
    "ignoreUnknownValues": true,
    "schema": {
      "fields": [
        {
          "name": "httpRequest",
          "type": "STRUCT",
          "fields": [
            {
              "name": "requestUrl",
              "type": "STRING"
            },
            {
              "name": "status",
              "type": "INT64"
            }
          ]
        },
        {
          "name": "timestamp",
          "type": "string",
          "mode": "NULLABLE"
        }
      ]
    },
    "sourceFormat": "NEWLINE_DELIMITED_JSON",
    "sourceUris": [
        "gs://your-gcs-bucket-name/logs/2020/04/01/*.json",
    ]
  }

sourceUrisは以下で取得

gsutil ls -r gs://your-gcs-bucket-name/logs | grep -E "\d{4}\/\d{2}\/\d{2}\/:$" | sed "s/://g"

上記のスキーマファイルを作ってbqコマンドでテーブルを作成した。

bq mk \
--external_table_definition=schemeFile \
your.tablename

https://cloud.google.com/bigquery/external-data-cloud-storage?hl=ja

これで分析ができるようになった。