web-dev-qa-db-ja.com

GBQでテーブルをトランケートする

GBQの既存のテーブルを切り詰めようとしていますが、実行すると以下のコマンドが失敗します。それを行うための特定のコマンドまたは構文はありますか? GBQのドキュメントを調べましたが、うまくいきませんでした。

TRUNCATE TABLE [dw_test.test];
17
Teja

BigQueryは、クエリ文字列の一部としてTRUNCATEをサポートしていません。 BQがサポートする唯一のDDL/DML動詞はSELECTです。

1つのオプションは、WRITE_TRUNCATEwrite disposition (リンクはクエリジョブパラメータ用ですが、宛先テーブルを持つすべてのジョブタイプでサポートされています)。これにより、テーブルに既にあるすべてのデータが切り捨てられ、ジョブの結果に置き換えられます。

内容を他のデータに置き換えたり、ジョブを開始したりしない場合は、おそらく同じスキーマでテーブルを削除して再作成するのが最善の方法です。

9
Danny Kitt

BigQueryはSELECTs以外をサポートするために使用していませんでしたが、クエリオプションで[レガシーSQLを使用する]をオフにしているかぎりサポートします。切り捨てはありませんが、 削除できます

DELETE from my_table WHERE 1=1

BigQueryではWHEREDELETEを使用する必要があるため、すべてを削除する場合は常にtrueになるステートメントを使用する必要があります。

CREATE OR REPLACE TABLE <dataset>.<table>
AS SELECT * FROM <dataset>.<table> LIMIT 0;

パーティションテーブルの場合、フィールド "created_on"にdayパーティションがあると想定して、次を実行します。

CREATE OR REPLACE TABLE <dataset>.<table> PARTITION BY created_on
AS SELECT * FROM <dataset>.<table> WHERE created_on = CURRENT_DATE() LIMIT 0;
9
Omar OLK