2016-01-06 34 views
1

我正在使用golang实现对google bigquery的插入。 该文件重复,并且需要每天更新。但是,重复项不应插入到bigquery中。 我使用谷歌云平台和golang的一些apis。但是,我还没有发现任何apis可以检查是否独特之前插入或设置为独特的架构中的特定领域。 我正在使用包装API并直接调用该函数。但是,该函数不检查该字段是否唯一。请建议golang的任何bigquery apis都有独特的密钥检查或独特的密钥设置。非常感谢!我会立即更新回复。Golang:Bigquery在插入前检查唯一密钥

+0

使用资料表与筛选器列表的方法来检查,如果已经存在的条目。基本上,做一个选择,如果你有东西回来,那么不要插入相应的记录,如果你不这样做,那么它是新的,你可以安全地插入。 – evanmcdonnal

+0

不能这样做。它创造了一笔费用。 – Kevin

+0

如果没有字段具有主键约束来防止插入,则无法在不增加插入成本的情况下确保唯一性。没有办法检查记录是否存在。 – evanmcdonnal

回答

1

BigQuery中,没有任何API或函数专门做某一领域的唯一性检查
您可以通过构建您的插入与目标结合源,并只插入独特的人
这可能需要你满足您的要求首先将数据插入“temp”表中,然后再做上面的GBQ加入

+0

谢谢你回答我。你的意思是我需要创建一个新表并将行从一个复制到另一个?这会造成一些查询费用 – Kevin

+0

我认为,唯一性检查会产生额外的查询费用,无论您使用什么最终选项 –

+0

谢谢米哈伊尔。那么我认为我不应该再做独特性了。 – Kevin

0

检查文档的StructSaver结构。

它有一个字段InserdID,正是对你的要求:

// If non-empty, BigQuery will use InsertID to de-duplicate insertions 
// of this row on a best-effort basis. 
InsertID string 
+0

但是请注意,InsertID可能是短暂的(文档保证至少一分钟)。因此,在此之后一段时间插入相同的InsertID是一个很好的机会,实际上不会被重复数据删除(@see https://cloud.google.com/bigquery/streaming-data-into-bigquery) – Dynom