😸
CloudStorage上のファイルをBigQueryでつかう
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
これで分析ができるようになった。
Discussion