BigQueryでTruncate Tableする方法
BigQueryでTruncate Table文を実行したことはありますか?
実行して「あれっ?構文エラーになる・・・」と困った方も多いかと思います。
BigQueryに限らずデータベースを利用していれば、テーブルのデータを全件削除したいタイミングはよくありますよね。
今回はBigQueryでテーブルのデータを全件削除する方法についてまとめました。
<2021-04-24更新>
BigQueryでTruncate Table文が利用できるようになったようです。
先日、利用して気づきました。。。
もう半年も前に利用できるようになっていたんですね。
Truncate Table以外にも利用できる機能が追加になっていますので、興味のある方はGoogle Cloudの以下の記事を読んでみてください。
https://cloud.google.com/blog/ja/products/bigquery/smile-new-user-friendly-sql-capabilities-bigquery
BigQueryにTruncate Tableは存在しない
結論から言うと、BigQueryにTruncate Table文は存在しません。
ですが、Truncate Tableと同じくテーブルのデータを全件一瞬で削除する方法は存在します。
今回はBigQueryのコンソール画面から簡単に実行できる方法について手順を説明します。
BigQueryのコンソールを利用してテーブルを一瞬で全件削除する方法
利用する機能
クエリ結果を指定したテーブルにロードする機能を利用してテーブルのデータをクリアします。
抽出結果が0件になるSQL文を作成する
Truncateしたいテーブル(データを全件削除したいテーブル)をFrom句に指定したSQL文を作成し、「LIMIT 0」を指定します。
具体的には以下のようなSQL文を作成します。
SELECT * FROM [プロジェクトID].[データセット名].[テーブル名]
LIMIT 0
「クエリの設定」画面を表示する
送信先をTruncateしたいテーブルに設定する
クエリ設定画面に以下の通り設定します。
- 送信先:「クエリ結果の宛先テーブルを設定する」を選択
- プロジェクト名:Truncate対象のプロジェクトを設定
- データセット名:Truncate対象のデータセット名を設定
- テーブル名:Truncate対象のテーブル名を設定
- 宛先テーブルの書き込み設定:「テーブルを上書きする」を選択
Truncateしたいテーブルの抽出結果(0件)を同じテーブルに上書きしています。
設定が完了すれば、「保存」ボタンをクリックします。
「実行」ボタンをクリック
実行ボタンをクリックすると元のテーブルスキーマのままでデータだけが削除された状態になります。
その他の方法
上記の「0件抽出結果を上書きする方法」以外に以下のような方法もありますが、あまりおすすめできません。
Delete文を発行する
BigQueryはDelete文をサポートしていますので、実行することはできますがWHERE句を必ず指定する必要があるため、必ずTrueになる条件式を設定します。
例えば、「1 = 1」などです。
DELETE FROM [プロジェクトID].[データセット名].[テーブル名]
WHERE 1 = 1
BigQueryの料金体系にDELTEの場合に利用料金が発生する記述がありますので、特に大量データの場合にはあまりおすすめできません。
テーブルを再作成する
テーブル作成時のCreate Tableスクリプトを保存してある場合は、単純にテーブルを削除してからもう一度Create Tableすることでも実現できます。
私も今回ご紹介した「0件抽出結果を上書きする方法」を知るまでは、大量テーブルの場合はこの方法でデータを削除していました。
Delete文よりも料金面で有利ではありますが、実際にやってみると作業時間は「0件抽出結果を上書きする方法」の方が圧倒的に短いです。