【BigQuery】特定テーブル以外のテーブルを全削除する

BigQueryの数千以上あるテーブルの中から、「○○というテーブル以外を全て削除したい」という処理を行おうとした際、それらしいオプションが見当たらなかったので少し遠回りをして削除しました。その際の処理を紹介します。

 

バックグラウンド

・残しておきたいテーブルは容量が大きく、loadし直すにしても少し時間がかかるので、全削除後に残しておきたいテーブルをloadし直すことは避けたい
・1日あたりプロジェクトごとに読み込めるジョブの数は決まっているので、無駄なリソースを消費したくない(上限は失敗を含み10,000個)
・GUIだと日が暮れる

 

対応した手順は以下の3STEPです。 削除対象のテーブルをリストにし、一括で削除を走らせます。

1.BigQuery上の対象データセットから、全テーブルリストを取得する
2.削除するテーブル名だけを抽出
3.削除

 

実行内容

bq lsコマンドではデフォルトで50件しかテーブル名を取得できないので、-aですべてを取得しています。

件数を指定したい場合は-n(または–max_results)を使用します。

例)データセット内のテーブルリストを1000件だけを取得する場合
bq ls -n 1000 <データセットID> > tables.txt
(bq ls –max_results=1000 <データセットID> > tables.txtでも可)

 

出力された結果は下記のようになっているので、不要な箇所(1,2行目)を取り除きます。

 

削除したいテーブル名だけになりました。

※今回はxargs -Pで並列処理を行うことはしていませんが、数が多すぎる場合は並列処理してしまって良いかと思います。

●この記事を書いた人