BigQueryでは全行削除するときはDELETEを使った方が良い。 Timetravelで復元もできるし、DELETEより早いし、お金もかからない。
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だと以下の通りの記述がある。
TRUNCATE TABLE文はロールバックできません。
BigQueryだとTRUNCATEしてもTimetravelで復元できる。一応、復元できることを確かめておく。
データの入ったテーブルを用意。
TRUNCATEする。
「課金されるバイト数」が0になっているので、課金されないことも確認できる。
ちゃんとTimetravelで復元できる。
BigQueryで全行削除ならTRUNCATEです。
以上