值不能为空。参数名称:baseUri

Value cannot be null. Parameter name: baseUri

我在 C# 控制台应用程序中使用具有服务帐户授权的 Google BigQuery API。

当我尝试加载 CSV 作业时,它抛出“值不能为空。 参数名称:baseUri" 异常。它仅针对单个 table,当我更改 table 名称时,它全部起作用。

这是堆栈跟踪:

at Microsoft.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at Microsoft.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccess(Task task)
   at Microsoft.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)
   at Microsoft.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult()
   at Google.Apis.Upload.ResumableUpload`1.<UploadCoreAsync>d__e.MoveNext() in c:\code\google.com\google-api-dotnet-client\default\Tools\Google.Apis.Release\bin\Debug\test\default\Src\GoogleApis\Apis\[Media]\Upload\ResumableUpload.cs:line 459

职位上传代码:

JobsResource.InsertMediaUpload InsertMediaUpload = new obsResource.InsertMediaUpload(BigQueryService, Job, Job.JobReference.ProjectId, fileStream, "application/octet-stream"); 
var JobInfo = InsertMediaUpload.UploadAsync();

谢谢。

我设法找到了问题的根本原因和解决方案。

实际错误: Table 架构不匹配。

原因: 在大查询中 table 需要字段模式。我从这个查询“Select * From Table-name Limit 1”的响应中得到 table 模式,因为无法构建新模式。当我从查询响应中获取 table 模式时,字段模式更改为 NULLABLE。这就是为什么我得到架构不匹配。

向 Google 开发人员提问:

  1. 当我们从 Response 中获取模式时,为什么所有字段模式都是 NULLABLE?
  2. 为什么Google API 没有return 实际错误,它只是抛出一个常见的错误语句,很烦人需要fiddler 来获取实际错误,那么我们将如何解决我们的生产问题。生产环境也需要fiddler吗?没有意义。

开发者建议:

使用 Fiddler 工具获取实际错误。在我的例子中,我从 Inspectors 选项卡下的 Textview 得到实际错误。希望这个 post 也能有所帮助。

谢谢。