Java Google云数据流输入集合添加的元素数与插入BigQuery的元素数不一致?

Java Google云数据流输入集合添加的元素数与插入BigQuery的元素数不一致?,java,google-bigquery,google-cloud-dataflow,apache-beam,google-cloud-pubsub,Java,Google Bigquery,Google Cloud Dataflow,Apache Beam,Google Cloud Pubsub,我目前有一个Google Cloud数据流作业,它使用来自Google Cloud PubSub订阅的消息,并每2分钟使用Load Jobs将结果写入BigQuery。然而,实际上,我向BigQuery中写入的行数似乎少于为WriteToBigQuery步骤在Google Cloud数据流UI中显示的元素数: 写入BigQuery的行数只有大约200000行。在查看StackDriver日志后,有一些信息级别的日志表明作业失败并正在重试,但没有说明作业失败的原因。除了一个带有以下消息的错误外

我目前有一个Google Cloud数据流作业,它使用来自Google Cloud PubSub订阅的消息,并每2分钟使用Load Jobs将结果写入BigQuery。然而,实际上,我向BigQuery中写入的行数似乎少于为WriteToBigQuery步骤在Google Cloud数据流UI中显示的元素数:

写入BigQuery的行数只有大约200000行。在查看StackDriver日志后,有一些信息级别的日志表明作业失败并正在重试,但没有说明作业失败的原因。除了一个带有以下消息的错误外,没有发生任何明显的错误:

 "Request failed with code 409, performed 0 retries due to IOExceptions, performed 0 retries due to unsuccessful status codes, HTTP framework says request can be retried, (caller responsible for retrying)"
消息中包含的HTTP资源为:

{ "error": {
"code": 401,
"message": "Request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.",
"errors": [
  {
    "message": "Login Required.",
    "domain": "global",
    "reason": "required",
    "location": "Authorization",
    "locationType": "header"
  }
],
"status": "UNAUTHENTICATED"}}
错误之后还有另一个信息级日志,其中包含以下消息(再次显示409异常代码):


不应该有任何身份验证错误,否则所有的行都不会写入BigQuery,所以我在这里很困惑。是否有其他方法来诊断问题?

我正在考虑这个问题,我不太确定该提出什么建议。(1) 如果管道成功完成,并且成功重试bq作业,那么您看到的单个bigquery作业失败的错误本身并不是问题。重复作业警告只是检测到作业尝试启动两次。理论上,这两种方法都不会导致数据丢失。柜台本身可能有某种问题。但是看看BigqueryIO代码,我没有看到任何捕获异常以防止元素被重试的情况。可能会有一个不明显的bug。如果你还没有看到它是否有帮助,你还会考虑更新你的SK SDK到最新版本2.19.0吗?谢谢你的快速响应。我目前正在使用2.18.0 Beam SDK,因为当我尝试使用2.19.0时,我收到了以下错误:“未能从工厂方法DataflowRunner#fromOptions(interface org.apache.Beam.SDK.options.PipelineOptions)构造实例:InvocationTargetException:未找到要暂存的文件。”即使不进行任何代码或命令行参数更改。您知道如何解决这个问题吗?您使用的是哪个版本的java?我在网上看到一些用户在使用Java9时遇到这种情况,尽管beam建议使用Java8。这里还有一个建议,使用maven将JAR传递给手动stage,这是基于这样一种理论,即存在一些问题阻止程序在类路径上自动找到JAR。
BigQuery job {jobId=insert_job_id, location=US, project=project_id} already exists, will not retry inserting it: