截断GBQ中的表

Tej*_*eja 14 google-bigquery

我试图截断GBQ中的现有表,但是当我运行它时,以下命令失败.是否有任何特定的命令或语法来做到这一点.我查看了GBQ文档,但没有运气.

TRUNCATE TABLE [dw_test.test];
Run Code Online (Sandbox Code Playgroud)

Xio*_*iov 27

虽然BigQuery不习惯支持除SELECTs 以外的任何其他内容,但只要您在查询选项中取消选中"使用旧版SQL"即可.没有截断,但您可以删除:

DELETE from my_table WHERE 1=1
Run Code Online (Sandbox Code Playgroud)

需要注意的是BigQuery规定使用WHEREDELETE,所以如果你想删除一切你需要使用,将永远是真实的陈述.


lao*_*aol 20

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

TRUNCATE TABLE [[project_name.]dataset_name.]table_name
Run Code Online (Sandbox Code Playgroud)

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


Oma*_*OLK 13

CREATE OR REPLACE TABLE <dataset>.<table>
AS SELECT * FROM <dataset>.<table> LIMIT 0;
Run Code Online (Sandbox Code Playgroud)

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

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


Dan*_*itt 7

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

一种选择是运行具有WRITE_TRUNCATE 写处理的作业(链接用于查询作业参数,但在具有目标表的所有作业类型上都支持它).这将截断表中已有的所有数据,并将其替换为作业的结果.

如果您不想将内容替换为其他数据或启动作业,则最佳选择可能是删除并重新创建具有相同模式的表.

  • 如何从 BQ 控制台截断表? (2认同)
  • 如果您正在使用Web UI,则可以在高级查询选项中找到`WRITE_TRUNCATE`处置.在查询编辑器下,单击"显示选项" - 然后将"写入首选项"选项设置为"覆盖表". (2认同)
  • 正确,查询语言不支持“DELETE”或“UPDATE”。[BigQuery 表是仅追加的](https://cloud.google.com/bigquery/docs/tables#deletingrows),因此如果您想更新或删除特定行,则需要仅使用您要添加的行重新创建表想在场。但是,这可以通过带有目标表的 SELECT * FROM table WHERE NOT(&lt;foo&gt;) 来完成。 (2认同)
  • @elvainch 编辑建议查看其他答案。 (2认同)