【问题标题】:Golang: Bigquery Check Unique Key before InsertingGolang:Bigquery 在插入之前检查唯一键
【发布时间】:2017-10-02 05:02:42
【问题描述】:

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

【问题讨论】:

  • 使用 tabledata 的 list 方法和过滤器来检查条目是否已经存在。基本上,做一个选择,如果你得到了一些东西,那么不要插入相应的记录,如果你没有,那么它是新的,你可以安全地插入。
  • 真的不能那样做。它会产生费用。
  • 如果字段没有主键约束来阻止插入,就无法在不增加插入成本的情况下确保唯一性。没有办法检查记录是否存在。
  • 谢谢埃文。我想我必须选择不避免重复。

标签: go unique google-bigquery


【解决方案1】:

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

【讨论】:

  • 感谢您回答我。你的意思是我需要创建一个新表并将行从一个复制到另一个?这将导致一些查询费用
  • 我认为,无论您使用哪种最终选项,唯一性检查都会产生额外的查询费用
  • 谢谢米哈伊尔。我认为我不应该再做唯一性了。
【解决方案2】:

检查StructSaver 结构的文档。

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

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

【讨论】:

猜你喜欢
  • 2013-05-19
  • 1970-01-01
  • 2011-11-01
  • 2017-09-06
  • 1970-01-01
  • 2011-07-13
  • 2023-04-02
  • 1970-01-01
  • 2015-12-04
相关资源
最近更新 更多