任何人都知道任何计划添加对从 Google Bigquery 中的表中删除部分数据的支持?我们现在遇到的问题是我们正在使用它来分析我们随着时间的推移收集的数据点。我们希望对过去 X 天的数据运行查询,但是在过去 X 天的数据之后,我们不再需要将数据存储在 BigQuery 中。
目前我们能想到的删除数据的唯一方法是删除整个数据表,然后重新创建它并用 X 天的数据加载它。不过,这也需要我们将数据存储在每日 CSV 文件中,这不是最佳选择。
关于如何处理此问题或近期是否有删除行查询的任何建议?
任何人都知道任何计划添加对从 Google Bigquery 中的表中删除部分数据的支持?我们现在遇到的问题是我们正在使用它来分析我们随着时间的推移收集的数据点。我们希望对过去 X 天的数据运行查询,但是在过去 X 天的数据之后,我们不再需要将数据存储在 BigQuery 中。
目前我们能想到的删除数据的唯一方法是删除整个数据表,然后重新创建它并用 X 天的数据加载它。不过,这也需要我们将数据存储在每日 CSV 文件中,这不是最佳选择。
关于如何处理此问题或近期是否有删除行查询的任何建议?
2016 年更新:BigQuery 现在可以删除和更新行——Fh
https://cloud.google.com/bigquery/docs/reference/standard-sql/dml-syntax
感谢您描述您的用例。BigQuery 在设计上是仅附加的。我们目前不支持从现有数据集中删除单行或一批行。
目前,要实现“循环”日志系统,您必须: 1. 每天创建一个新表(如有必要,删除旧表) 2. 将数据附加到表并按时间/日期查询
我实际上建议每天创建一个新表。由于 BigQuery 按查询的数据量收费,这对您来说是最经济的,而不必每次都查询整个海量数据集。
顺便说一句 - 您目前如何收集数据?
要删除大查询中的记录,您必须首先启用标准sql。
启用标准 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
#standardSQL 如果要删除所有行,请使用以下代码
delete from `project-id.data_set.table_name` where 1=1;
如果要删除特定行,请使用以下代码。
delete from `project-id.data_set.table_name` where (your condition)
此外,如果适用,您可以尝试 BigQuery 的 OMIT RECORD IF,返回除您要删除的项目之外的所有项目。然后,根据该查询结果创建一个新表。
(示例取自 Google 参考文档)
SELECT * FROM
publicdata:samples.github_nested
OMIT RECORD IF
COUNT(payload.pages.page_name) <= 80;
如果要删除表中的所有行,则:
DELETE FROM {dataset}.{table} WHERE TRUE
什么对我有用:
TRUNCATE TABLE `project_id.dataset.table_name`
这仅在使用 Legacy SQL 时才相关。
您可以尝试以下方法:
DELETE FROM {dataset}.{table} WHERE {constraint}