【问题标题】:Google BigQuery Delete Rows?Google BigQuery 删除行?
【发布时间】:2012-05-23 03:58:16
【问题描述】:

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

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

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

【问题讨论】:

    标签: google-bigquery sql-delete delete-row


    【解决方案1】:

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

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


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

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

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

    顺便问一下 - 您目前如何收集数据?

    【讨论】:

    • 好建议。我们目前将其存储在 MySQL 中,将我们实际处理的数据转储到 CSV 并上传。我正在寻找对特定数据集中表数量的任何限制,但找不到任何限制。在没有限制的情况下这是正确的吗?
    • 如果您采用轮换表方法,仅供参考 - BigQuery 现在支持表过期时间。您可以使用 bq update --expiration <time_from_now_in_seconds> dataset.table 使用 bq 工具更新表。
    • @Daum BigQuery 对每个数据集可以创建的表数量没有限制。
    • 是否仍然无法删除基于某些用户指定过滤器的数据?我只是想知道我是否将数据流式传输到 bigquery 中,如果我得到一些 duff 数据,是否可以清除它们?是否有任何模式来处理 duff 数据?
    • 终于可以删除更新了!多年来我一直在等待这个功能
    【解决方案2】:

    大查询删除记录,需要先开启标准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

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

      • 删除所有行不起作用。
      【解决方案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

      【讨论】:

        【解决方案5】:

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

        DELETE FROM {dataset}.{table} WHERE TRUE

        【讨论】:

        • 我收到一条错误消息,告诉表 Tenor.trending_terms 上的 UPDATE 或 DELETE 语句会影响流缓冲区中的行,这是不受支持的
        【解决方案6】:

        什么对我有用:

        TRUNCATE TABLE `project_id.dataset.table_name`
        

        【讨论】:

          【解决方案7】:

          这仅在使用旧版 SQL 时才相关。

          您可以尝试以下方法:

          DELETE FROM {dataset}.{table} WHERE {constraint}
          

          【讨论】:

          • dataset.table 中删除,其中为 true
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-03-30
          • 2020-10-12
          • 1970-01-01
          • 2023-03-19
          • 2017-07-22
          • 1970-01-01
          相关资源
          最近更新 更多