谷歌BigQuery删除行?

42

有没有关于在Google Bigquery中删除数据表中某些部分的支持计划?我们目前遇到的问题是,我们使用它来分析随时间收集的数据点。我们想要查询过去X天的数据,然而在过去X天的数据之后,我们不再需要将数据存储在BigQuery中。

当前唯一的想法是删除整个数据表,然后重新创建并加载X天的数据。然而,这会要求我们每天将数据存储为CSV文件,这并不理想。

是否有关于如何处理此问题或即将推出删除行查询的建议?

7个回答

40

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

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


感谢您描述您的用例。BigQuery的设计是追加方式存储数据的,目前我们不支持从现有数据集中删除单个或批量的行。

目前,要实现“轮换”日志系统,您必须执行以下操作之一: 1.每天创建一个新表(如果需要,删除旧表) 2.将数据附加到表中,并按时间/日期查询

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

顺便问一下,您当前如何收集数据?


好的建议。我们目前将数据存储在MySQL中,将实际处理的数据转储到CSV并上传。我正在寻找特定数据集中表格数量的任何限制,但找不到任何信息。这是没有限制的吗? - Daum
2
如果您采用旋转表的方法,请注意:BigQuery现在支持表过期时间。您可以使用bq工具更新表格,使用命令bq update --expiration <time_from_now_in_seconds> dataset.table - Jordan Tigani
1
基于用户指定筛选条件删除数据仍然不可能吗?我只是想知道,如果我将数据流式传输到BigQuery中,如果我得到一些错误数据,是否可以清除它们?有没有处理错误数据的模式? - opensourcegeek
我们创建了一个相关的问题,也许已经找到了解决方法:https://dev59.com/YpPea4cB1Zd3GeqP-xt1 - Manuel Arwed Schmidt
1
终于可以删除和更新了!我已经等了这个功能好几年了。 - Charles Chow
显示剩余2条评论

35

在 BigQuery 中删除记录,您需要先启用标准 SQL。

启用标准 SQL 的步骤:

  1. 打开 BigQuery Web UI。
  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

17

#标准SQL 如果你想删除所有的行,请使用以下代码

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

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

delete from `project-id.data_set.table_name` where (your condition)

删除所有行不起作用。 - mjeday
你尝试过使用这个吗? delete from project-id.data_set.table_name where 1=1; - sethu

5
如果您想删除表中的所有行,则可以执行以下操作:

DELETE FROM {dataset}.{table} WHERE TRUE


3
我收到一个错误消息,告诉我更新或删除表格tenor.trending_terms的语句会影响流缓冲区中的行,这是不被支持的。 - Tobi
如果其他人也好奇的话,BigQuery需要一些时间来摄入/分发流式缓冲区。如果你遇到了would affect rows in the streaming buffer, which is not supported这个错误,只需等几分钟即可。这个答案似乎表明可能需要长达90分钟。在我的情况下,大约5分钟就足够清除它了。 - BU0
我很高兴地宣布,通过BigQuery Storage Write API*最近流式传输的数据现在支持变异的DML语句(UPDATE、DELETE、MERGE)的公共预览!快来体验这个功能,并了解如何将您的项目添加到白名单中:https://cloud.google.com/bigquery/docs/write-api#use_data_manipulation_language_dml_with_recently_streamed_data。*此功能仅支持通过BigQuery Storage Write API最近流式传输的数据,不支持传统的insertAll流式传输API。 - undefined

5

对我有用的内容:

TRUNCATE TABLE `project_id.dataset.table_name`

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

大数据查询语句参考 本文档介绍了Google Cloud BigQuery中可用的标准SQL查询语句,包括常见的查询操作和函数,以及多个示例。我们还讨论了如何在查询过程中引用表、视图和外部数据源,并提供了一些性能优化技巧。 要查看完整的查询语句,请按照以下步骤操作: 1. 在BigQuery网页UI中打开您的查询编辑器。 2. 输入或粘贴一个查询。 3. 单击“运行”按钮以执行查询。

3
这仅适用于使用传统SQL的情况下。
你可以试试以下方法:
DELETE FROM {dataset}.{table} WHERE {constraint}

dataset.table 中删除所有数据 - moshe beeri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接