在 GBQ 中截断一个 table

Truncate a table in GBQ

我正在尝试对 GBQ 中现有的 table 进行分类 运行,但是当我 运行 它时,下面的命令失败了。是否有任何特定的命令或语法可以做到这一点。我查看了 GBQ 文档,但没有运气。

TRUNCATE TABLE [dw_test.test];

编辑(2020 年 11 月):BigQuery 现在支持其他动词,请查看其他答案以获得更新的解决方案。

BigQuery 不支持 TRUNCATE 作为查询字符串的一部分。 BQ 支持的唯一 DDL/DML 动词是 SELECT.

一个选项是 运行 具有 WRITE_TRUNCATE write disposition 的作业(link 用于查询作业参数,但所有具有目的地的作业类型都支持table)。这将 运行 分类 table 中已有的所有数据,并将其替换为作业的结果。

如果您不想用其他数据替换内容或开始工作,最好的选择可能是删除并重新创建具有相同架构的 table。

虽然 BigQuery 过去不支持除 SELECT 之外的任何其他内容,但现在只要您取消选中查询选项中的 "Use Legacy SQL" 即可。没有截断,但是 you can delete:

DELETE from my_table WHERE 1=1

请注意,BigQuery 需要在 DELETE 中使用 WHERE,因此如果您想删除所有内容,您需要使用始终为真的语句。

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

对于分区表,假设您在字段 "created_on" 上有一个日分区,然后执行以下命令:

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

好消息,现在支持 TRUNCATE TABLE:https://cloud.google.com/bigquery/docs/reference/standard-sql/dml-syntax#truncate_table_statement

TRUNCATE TABLE [[project_name.]dataset_name.]table_name

但是,请注意,如果通过您的 table 定义需要分区过滤器,这将不起作用/不受支持。