Golang:Bigquery在插入前检查唯一密钥

Golang:Bigquery在插入前检查唯一密钥,go,unique,google-bigquery,Go,Unique,Google Bigquery,我正在使用golang实现对google bigquery的插入。 该文件有重复项,需要每天更新。但是,不应将重复项插入到bigquery中。 我使用谷歌云平台和golang的一些API。然而,我并没有发现任何API可以在插入之前检查是否唯一,或者为模式中的特定字段设置为唯一。 我正在使用包装器api并直接调用函数。但是,该函数不检查字段是否唯一。请建议golang的任何bigquery API对架构进行唯一密钥检查或唯一密钥设置。非常感谢!我会立即更新回复。在BigQuery中,没有任何API

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

在BigQuery中,没有任何API或函数专门对给定字段进行唯一性检查
通过将insert构造为源与目标的连接,并且只插入唯一的insert,您可以满足您的需求
这可能需要您首先将数据插入到“temp”表中,然后在GBQ中执行上述操作,检查文档的结构

它有一个字段
insertID
,完全符合您的要求:

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

使用带有筛选器的tabledata的list方法检查条目是否已经存在。基本上,做一个选择,如果你得到了一些东西,那么不要插入相应的记录,如果你没有,那么它是新的,你可以安全地插入。不能真的这样做。它会产生费用。如果字段没有阻止插入的主键约束,则无法在不增加插入成本的情况下确保唯一性。没有办法检查记录是否存在。谢谢Evan。我想我必须选择不避免重复。谢谢你的回答。您的意思是我需要创建一个新表并将行从一个表复制到另一个表吗?这将导致一些查询费用。我认为,无论最终使用哪种选项,唯一性检查都会产生额外的查询费用。我认为我不应该再做唯一性了。但是请注意,InsertID可能是短期的(文档保证至少一分钟)。因此,很有可能在此后的某段时间内使用相同的插入ID进行插入时,实际上不会消除重复数据(@see)