当前位置: 首页 > 知识库问答 >
问题:

消除 BigQuery 表中的重复记录

凌鹏程
2023-03-14

我计划每天向BigQuery表添加增量数据。每次向现有表添加增量数据时,我都希望从表中现有数据中消除重复记录(基于主键列)。一种方法是:-

  1. 从增量数据中收集密钥集(让我们称之为INCR_KEYS
  2. 在 - 从表中选择all_cols,其中pkey_col不在(INCR_KEYS))的行上运行查询,并将结果存储在新表中。
  3. 将增量数据追加到新表中。

我对这种方法的担忧是,它会创建一个大桌子的副本,并添加到我的账单中。

有没有更好的方法可以在不创建重复表的情况下实现相同的目标?

共有3个答案

尉迟哲瀚
2023-03-14

您可以设置新的目标表,只查询计数并按所有列分组:

SELECT
  FIELD1,
  FIELD2,
  FIELD3,
  FIELD4
FROM (
  SELECT
    COUNT (*),
    FIELD1,
    FIELD2,
    FIELD3,
    FIELD4
  FROM
    [<TABLE>]
  GROUP BY
    FIELD1,
    FIELD2,
    FIELD3,
    FIELD4)
姜景焕
2023-03-14

您可以在目标表设置为现有表的情况下运行查询,并将写入处置设置为截断:

bq query --allow_large_results --replace --destination_table=mydataset.mytable \
    'SELECT * FROM mydataset.mytable
     WHERE key NOT IN (SELECT key FROM mydataset.update)'
bq cp --append_table mydataset.update mydataset.mytable

我相信这将工作,但我认为这是值得采取备份,尤其是因为你可以删除它后不久。

bq cp mydataset.mytable mydataset.backup
# You can also build the new table in one pass:
bq query --allow_large_results --replace --destination_table=mydataset.mytable \
    'SELECT * FROM (
         SELECT * FROM mydataset.mytable
         WHERE key NOT IN (SELECT key FROM mydataset.update)
     ), (
         SELECT * FROM mydataset.update
     )'
bq rm mydataset.backup
云霖
2023-03-14

我不知道有什么方法可以在不创建重复表的情况下做到这一点——这听起来是一个非常聪明的解决方案。

但是,您的增量成本可能非常小 - BigQuery仅在数据存在的时间内向您收费。如果您删除旧表,则只需为两个表支付几秒钟或几分钟的费用。

 类似资料:
  • 本文向大家介绍sql 删除表中的重复记录,包括了sql 删除表中的重复记录的使用技巧和注意事项,需要的朋友参考一下 遇见了表中存在重复的记录的问题,直接写sql删除时最快的,才不要慢慢的复制到excel表中慢慢的人工找呢 如下sql,找出重复的记录,和重复记录中ID值最小的记录(表中ID为自增长) 然后就可以直接删除,基本原理就是,找到重复记录的每一条记录,排除掉重复id最小的记录,删除剩余的重复

  • 问题内容: 嗨,在这里我遇到了一种情况,即由于错误地没有删除表,我已经运行了该表的批处理文件,该文件由一些详细的插入语句组成 我有一个像alert_priority的表由类似 现在错误地没有删除 alert_priority 我已经执行了表的脚本文件,其中包含一些插入语句,现在执行脚本后,我在表中的记录就像 现在,我想删除多余的记录(Id 3之后的记录),并且在执行脚本文件之前,我应该拥有所有存在

  • 本文向大家介绍python删除列表中重复记录的方法,包括了python删除列表中重复记录的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了python删除列表中重复记录的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的Python程序设计有所帮助。

  • 问题内容: 我有一张叫的桌子。 它包含名为和的字段。现在,我想从表中删除所有包含表中已经包含的名字和姓氏的记录。 我使用mysql数据库,并且是表中的主键。 问题答案: 删除之后,将删除所有重复项,并为您提供最新的CustomerID 虽然有警告提示。我不知道您的用例,但是完全可以让两个人使用完全相同的名字(我们甚至一次都具有相同的地址)。

  • 我在Google BigQuery中有一个表,它由几个字段组成,然后是一个可能包含一个或多个对象的重复记录。我想在重复数据中创建一个新表,其中包含一个额外字段,并将原始数据复制到新表中,用GENERATE_UUID()的输出填充新字段,以便每个重复数据行都有一个唯一标识符。 我有一个类似的问题,当目标包含重复字段时,如何从一个BigQuery表复制到另一个?但我不知道如何调整它以适应我当前的用例。

  • 问题内容: 请使用以下tsql查询: 我知道它在做什么,但是逻辑的最后一部分(对于每个重复集,在– insert一行之后)没有意义。在我们有用于删除所有重复行的代码集的地方,这消除了重复行,那么上一节的内容是什么? 该查询发现这里 谢谢 问题答案: 在我们有用于删除所有重复行的代码集的地方,这消除了重复行,那么上一节的内容是什么? 首先,它删除曾经有重复的所有行。也就是说,所有行,并且原始也。在上