背景
Big Query で使ったクエリのコストをコマンドでまとめて調べたい。管理者権限でなければ全体の利用料などが確認できない場合がある。方法
bq コマンドの ls 命令の j オプションにて、JOB IDが取得できる。 また show 命令の j オプションにて、billing bytes などを取得できる。よって、次のコマンドを利用する。
bq ls -j -n 1000 | ruby -ne 'puts $1 if $_ =~ /(bq\S+)/' | xargs -L1 bq show -j > a.txtn オプションの後の1000件は必要に応じて各自で調整する。1000件は多少時間がかかる。(1件1秒だとすると、20分くらいかかることになる。)
これを grep などすればよい。例えば、次のワンライナーでは、billing bytes の降順にソートする。
grep query a.txt | ruby -ne 'puts $_.split(/\s+/).join("\t")' | sort -k9,9nrまた次のワンライナーでは、テラバイト数の合計を表示する。
grep query a.txt | ruby -ne 'puts $_.split(/\s+/).join("\t")' | ruby -ane 'BEGIN{$s=0};$s+=$F[8].to_i;END{puts $s/1000/1000/1000/1000}'日付などでフィルタリングすればよい。
jq を使った方法
jq を使ったコマンド。時刻と、billing tier, billing bytes, query を一気に(ただし時間は同じようにかかる)出す。bq ls -n 10000 --format prettyjson -j | jq -r '.[] | [.statistics.startTime, .statistics.query.billingTier, .statistics.query.totalBytesBilled, .configuration.query.query] | @tsv'
まとめ
Big Query のクエリの利用料をコマンドで取得する方法を示した。追記
- 2017/04/11: jq 使った方法
- 2019/06/27: jq 使った方法はそのままできなかったので、大幅に修正