Google bigquery 消除BigQuery表中的重复记录

Google bigquery 消除BigQuery表中的重复记录,google-bigquery,Google Bigquery,我计划每天向BigQuery表追加增量数据。每次向现有表中添加增量数据时,我都希望消除表中现有数据中基于主键列的重复记录。 一种方法是: 从增量数据中收集密钥集,我们称之为增量密钥 在以下行上运行查询-从表中选择所有列,其中pkey\u col不在INCR\u键中-并将结果存储在新表中。 将增量数据追加到新表中。 我对这种方法的担心是,它会创建一个大表的副本,并添加到我的账单中 有没有更好的方法来实现同样的目标而不创建重复的表 我不知道有什么方法不创建一个重复的表就可以做到这一点——这听起来是一

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

从增量数据中收集密钥集,我们称之为增量密钥 在以下行上运行查询-从表中选择所有列,其中pkey\u col不在INCR\u键中-并将结果存储在新表中。 将增量数据追加到新表中。 我对这种方法的担心是,它会创建一个大表的副本,并添加到我的账单中


有没有更好的方法来实现同样的目标而不创建重复的表

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


然而,对您来说,增量成本可能非常小——BigQuery只向您收取数据存在时间长度的账单。如果删除旧表,您只需为两个表支付几秒钟或几分钟的费用。

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

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

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

SELECT
  FIELD1,
  FIELD2,
  FIELD3,
  FIELD4
FROM (
  SELECT
    COUNT (*),
    FIELD1,
    FIELD2,
    FIELD3,
    FIELD4
  FROM
    [<TABLE>]
  GROUP BY
    FIELD1,
    FIELD2,
    FIELD3,
    FIELD4)

这张桌子有多大?如果压缩大于64MB,2将失败。@RyanBoyd-这不应该是问题。如果INCR_键>64MB,我可以将INCR_键拆分为更小的块,然后重复问题是如果完整表(即不在INCR_键中的数据>64MB)。2中的SELECT查询不会成功。@RyanBoyd-Hmm,再次查看了开发者指南。那么,我们必须想出一个替代方法。谢谢你指出这一点!这是你的问题。我同意我们需要更好的渠道让你问这类问题。我们正试图为您找出最好的方法,同时确保所有的技术/开发人员问题都以这样的方式出现。同时,请随时通过Google+和twitter上的ryguyrg联系我们。谢谢@Jordan,我可以接受!如果有人能在不涉及重复表的情况下提出解决方案,那就太好了。这到底是如何工作的?您是如何填写mydataset.update的?