BigQueryでTruncate Tableする方法

2020年2月24日BigQuery

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件抽出結果を上書きする方法」の方が圧倒的に短いです。

BigQuery

Posted by snow