Atsushi2022の日記

データエンジニアリングに関連する記事を投稿してます

BigQueryで全行削除するときはDELETEを使う

BigQueryでは全行削除するときはDELETEを使った方が良い。 Timetravelで復元もできるし、DELETEより早いし、お金もかからない。

BigQuery公式

When performing a DELETE operation to remove all the rows from a table, use TRUNCATE TABLE statement instead. The TRUNCATE TABLE statement is a DDL (Data Definition Language) operation that removes all rows from a table but leaves the table metadata intact, including the table schema, description, and labels. Since TRUNCATE is a metadata operation it does not incur a charge.

TRUNCATEだとトランザクションログが残らず、復元できない、という認識だった。例えば、Oracle 12.1だと以下の通りの記述がある。

Orable公式

TRUNCATE TABLE文はロールバックできません。

BigQueryだとTRUNCATEしてもTimetravelで復元できる。一応、復元できることを確かめておく。

データの入ったテーブルを用意。

TRUNCATEする。

「課金されるバイト数」が0になっているので、課金されないことも確認できる。

ちゃんとTimetravelで復元できる。

BigQueryで全行削除ならTRUNCATEです。

以上