Google bigquery BigQuery-重试失败的插入作业

Google bigquery BigQuery-重试失败的插入作业,google-bigquery,Google Bigquery,我有一个关于在BigQuery中重试失败的插入作业的问题。根据链接中的BigQuery文档,我们可以使用相同的作业id重试任意次数,并且只有一个作业会成功 请注意,对给定作业ID调用jobs.insert()是幂等的;在里面 换句话说,您可以在同一个作业上重试任意次数 而这些操作中最多有一个会成功 但是,当我稍后重试具有相同id的失败(已完成但有错误)作业时,它将失败并出现以下错误 { "code" : 409, "errors" : [ { "domain" : "global

我有一个关于在BigQuery中重试失败的插入作业的问题。根据链接中的BigQuery文档,我们可以使用相同的作业id重试任意次数,并且只有一个作业会成功

请注意,对给定作业ID调用jobs.insert()是幂等的;在里面 换句话说,您可以在同一个作业上重试任意次数 而这些操作中最多有一个会成功

但是,当我稍后重试具有相同id的失败(已完成但有错误)作业时,它将失败并出现以下错误

{
  "code" : 409,
  "errors" : [ {
    "domain" : "global",
    "message" : "Already Exists: Job bigquery-eval:INSERT-user_sessions-sessions_test-168-06-10-2015",
    "reason" : "duplicate"
  } ],
  "message" : "Already Exists: Job bigquery-eval:INSERT-user_sessions-sessions_test-168-06-10-2015"
}
你们能告诉我为什么失败,我们如何重试吗?根据我的理解,这不应该失败。如果我的期望是错误的,请纠正我

我还想知道当存在具有相同作业id的并发插入请求时BigQuery的行为。我知道这不应该发生。但我想了解。当我运行很多并发进程执行插入时,我看到了很多这样的错误。但无法从回答中确定原因

已编辑

这是我在该id上执行get时得到的响应。显然,由于末尾有一个换行符,它已完成,但出现了错误

{
  "id": "bigquery-eval:INSERT-user_sessions-sessions_test-168-06-10-2015",
  "status": {
    "state": "DONE",
    "errorResult": {
      "reason": "invalid",
      "message": "Too many errors encountered. Limit is: 0."
    },
    "errors": [
      {
        "reason": "invalid",
        "location": "File: 0 / Offset:0 / Line:1 / Column:2411 / Field:",
        "message": "parse error: trailing garbage\n"
      },
      {
        "reason": "invalid",
        "message": "Too many errors encountered. Limit is: 0."
      }
    ]
  },
  "statistics": {
    "creationTime": "1444150359688",
    "startTime": "1444151563664",
    "endTime": "1444151566721",
    "load": {
      "inputFiles": "1",
      "inputFileBytes": "19091357",
      "outputRows": "0",
      "outputBytes": "0"
    }
  }
}

谢谢您的时间。

hmmm我找到了这个说明您需要执行作业的文档。获取,更改ID、jobID、status和statistics字段,然后再次抛出以再次运行。此外,完成时出现错误!=失败。。。它有错误状态吗?嗯,我错过了这个。但我想知道这对幂等插入有什么帮助。我发布的链接建议使用相同的作业id重试。哪一个是正确的?对它确实有错误的结果。错误是文件末尾有换行符。我的案例中允许的错误数为0。因此,不应加载此文件(因为它是原子文件)。这是一个很好的问题。现在我的理论是,如果它成功了,它不会让你再次运行它,但如果它失败了,它可以再试一次。正如你所说的,它已经完成了,但是有错误。。。这意味着它有错误,而不是它失败了。它有错误状态吗?你可以有有问题的行(这将导致你的回复出现错误),但仍然有一份成功的工作。我已经编辑了我的原始帖子,以包含旧的工作细节。请查收。