Google BigQuery删除行?

问题描述 投票:20回答:4

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

目前我们可以想到删除数据的唯一方法是删除整个数据表,然后重新创建并加载X天数据。这虽然要求我们将数据存储在每日CSV文件中,这不是最佳的。

有关如何处理此问题或在不久的将来是否有删除行查询的任何建议?

google-bigquery sql-delete delete-row
4个回答
24
投票

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

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


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

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

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

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


20
投票

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

启用标准sql的步骤

  1. 打开BigQuery Web UI。
  2. 单击“撰写查询”。
  3. 单击显示选项。
  4. 取消选中Use Legacy 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


2
投票

此外,如果适用,您可以尝试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


0
投票

这仅在使用旧版SQL时才有意义。

您可以尝试以下方法:

DELETE FROM {dataset}.{table} WHERE {constraint}
© www.soinside.com 2019 - 2024. All rights reserved.