BigQueryで自分が発行したjobをまとめてキャンセルする

小ネタです。特にLooker Studioでよく起きますが、カスタムクエリや選択するフィールドをぽちぽちいじっていると、その都度クエリが発行されます。探索的にあれこれいじっていると、段々クエリが詰まってくることもあります(Looker Studio側がうまいことjobのキャンセルをしてくれない...?)。データのスキャン量やスロットの使用量的にもよくないので、こういったjobはキャンセルしたいです。しかし、BigQueryのWebコンソールからはまとめてキャンセルすることはできないですし、bqコマンドも基本的にjob_idを一個一個指定する形になっています。十数個ほどjobが滞留しているときに、一個一個指定するのは手間がかかります。

というわけでまとめてキャンセルするワンライナーを書きました。

bq --project_id my-project ls --jobs --all --format json | \
  jq -r '.[] | select(.state == "RUNNING" and .user_email == "me@example.com") | .id' | \
  xargs -I% bq --project_id my-project --nosync cancel %

BigQuery Scriptingでやる方法もよさそうです。