Go 库的 BigQuery 行插入失败
Posted
技术标签:
【中文标题】Go 库的 BigQuery 行插入失败【英文标题】:BigQuery row insertions failed with Go library 【发布时间】:2017-01-29 13:42:21 【问题描述】:当我尝试在 bigquery 中插入时,我收到此错误“X 行插入失败”,其中 X 是行数。
我在 Golang 中使用这个库“cloud.google.com/go/bigquery”
我在这里附上代码:
u := table.Uploader()
var inserts []*bigquery.StructSaver
for _, insert := range value
aux := bigquery.StructSaverStruct: insert, Schema: schema
inserts = append(inserts, &aux)
err := u.Put(ctx, inserts)
if err != nil
fmt.Printf("%v\n", err)
并非每次尝试都会发生这种情况,我不知道什么会产生这种情况。 有人遇到同样的错误吗?
【问题讨论】:
文档指出“如果一个或多个行上传失败,Put 返回一个 PutMultiError。PutMultiError 包含每个失败行的 RowInsertionError。”因此,要获取更多错误信息,您可以将错误类型转换为 PutMultiError(例如:multiError := err.(PutMultiError)
),对其进行迭代,然后对 MultiErrors 进行迭代,并打印每个错误。有关详细信息,请参阅文档:godoc.org/cloud.google.com/go/bigquery#PutMultiError
谢谢@1lann!但是我看到的信息只是说“无效”。有什么想法可以得到更详细的原因吗?
@OğuzYıldız 我遇到了同样的无效错误,你有没有解决它。
【参考方案1】:
使用bigquery.PutMultiError
我得到以下属性,其中Message
描述了失败原因。
Location
:专栏
Message
: 失败了
Reason
:这可以简单地是invalid
这是一个例子:
Location: "speed"; Message: "Cannot convert value to integer (bad value):foobar"; Reason: "invalid"
这是一个使用 PutMultiError
的示例,如 1lann 所述。值得注意的是,Put
可以返回 *errors.errorString
或 bigquery.PutMultiError
,因此检查您有哪些是很有用的。
err := u.Put(ctx, inserts)
if err != nil
if multiError, ok := err.(bigquery.PutMultiError); ok
for _, err1 := range multiError
for _, err2 := range err1.Errors
fmt.Println(err2)
else
fmt.Println(err)
【讨论】:
【参考方案2】:一种可能的解决方法是确保导出结构的字段(例如以大写字母开头)。
这只是一个非常糟糕的错误消息,这只是您收到该错误的原因之一
【讨论】:
以上是关于Go 库的 BigQuery 行插入失败的主要内容,如果未能解决你的问题,请参考以下文章
sql [BigQuery - Facebook产品目录]查询para obtenerelcatálogodeproductos de Kichink。 #facebook #bigqu