30

任何人都知道任何计划添加对从 Google Bigquery 中的表中删除部分数据的支持?我们现在遇到的问题是我们正在使用它来分析我们随着时间的推移收集的数据点。我们希望对过去 X 天的数据运行查询,但是在过去 X 天的数据之后,我们不再需要将数据存储在 BigQuery 中。

目前我们能想到的删除数据的唯一方法是删除整个数据表,然后重新创建它并用 X 天的数据加载它。不过,这也需要我们将数据存储在每日 CSV 文件中,这不是最佳选择。

关于如何处理此问题或近期是否有删除行查询的任何建议?

4

7 回答 7

38

2016 年更新:BigQuery 现在可以删除和更新行——Fh

https://cloud.google.com/bigquery/docs/reference/standard-sql/dml-syntax


感谢您描述您的用例。BigQuery 在设计上是仅附加的。我们目前不支持从现有数据集中删除单行或一批行。

目前,要实现“循环”日志系统,您必须: 1. 每天创建一个新表(如有必要,删除旧表) 2. 将数据附加到表并按时间/日期查询

我实际上建议每天创建一个新表。由于 BigQuery 按查询的数据量收费,这对您来说是最经济的,而不必每次都查询整个海量数据集。

顺便说一句 - 您目前如何收集数据?

于 2012-05-15T15:48:37.980 回答
29

要删除大查询中的记录,您必须首先启用标准sql。

启用标准 sql 的步骤

  1. 打开 BigQuery 网页界面。
  2. 单击编写查询。
  3. 单击显示选项。
  4. 取消选中使用旧版 SQL 复选框。

这将使 BigQuery 数据操作语言 (DML) 能够更新、插入和删除 BigQuery 表中的数据

现在,您可以编写普通 SQL 查询来删除记录

DELETE [FROM] target_name [alias] WHERE condition

您可以参考: https ://cloud.google.com/bigquery/docs/reference/standard-sql/dml-syntax#delete_statement

于 2017-03-16T10:51:16.147 回答
6

#standardSQL 如果要删除所有行,请使用以下代码

delete from `project-id.data_set.table_name` where 1=1;

如果要删除特定行,请使用以下代码。

delete from `project-id.data_set.table_name` where (your condition)
于 2020-07-29T14:21:49.883 回答
3

此外,如果适用,您可以尝试 BigQuery 的 OMIT RECORD IF,返回除您要删除的项目之外的所有项目。然后,根据该查询结果创建一个新表。

(示例取自 Google 参考文档)

SELECT * FROM
  publicdata:samples.github_nested

OMIT RECORD IF
  COUNT(payload.pages.page_name) <= 80;

来源:https ://cloud.google.com/bigquery/query-reference

于 2016-07-15T13:57:27.930 回答
3

如果要删除表中的所有行,则:

DELETE FROM {dataset}.{table} WHERE TRUE

于 2020-04-23T22:31:20.420 回答
3

什么对我有用:

TRUNCATE TABLE `project_id.dataset.table_name`
于 2021-04-27T19:24:49.493 回答
2

这仅在使用 Legacy SQL 时才相关。

您可以尝试以下方法:

DELETE FROM {dataset}.{table} WHERE {constraint}
于 2019-02-27T16:33:33.710 回答