【问题标题】:bigquery upload big (compressed) CSV 100 seconds timeoutbigquery 上传大(压缩)CSV 100 秒超时
【发布时间】:2013-12-06 17:09:31
【问题描述】:

当尝试使用 .net API 1.5.0.222 上传(一个大的)“gzipped”(30MB) 压缩 csv 文件 (90MB) 时,100 秒后总是出错

[System.Threading.Tasks.TaskCanceledException]    {System.Threading.Tasks.TaskCanceledException: A task was canceled.
   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.<Upload>d__0.MoveNext() in c:\code.google.com\google-api-dotnet-client\default_3\Tools\Google.Apis.Release\bin\Debug\output\default\Src\GoogleApis\Apis\[Media]\Upload\ResumableUpload.cs:line 362}  System.Threading.Tasks.TaskCanceledException

我在这里找到了与 HTTP POST 100 秒超时相关的内容:

Can't set HttpWebRequest timeout higher than 100 seconds when doing a POST?

但它仅与 HttpWebRequest 类相关(与 Bigquery .NET API 无关)。

我没有找到如何使用 bigquery (.net) API 设置此超时,也没有找到如何访问底层(我想是)HttpWebRequest 实例。

有没有办法设置这个超时时间?

或者以特定方式将本地 csv 文件上传到 bigquery 以避免超时?

【问题讨论】:

    标签: c# csv file-upload upload google-bigquery


    【解决方案1】:

    这太容易了,问这个问题几乎是一种耻辱...... 项目中缺少参考,并且允许这样做的属性不可见。 无论如何..解决方案是(10分钟超时):

        BigqueryService bq = someMethodToGetIt(...);
        bq.HttpClient.Timeout = new TimeSpan(0, 10, 0);
    

    【讨论】:

    • 问一个问题,即使很简单也不丢人。你知道为什么,因为我用你的答案来节省一天和使用 Google Drive API 的头痛。感谢您提供这个有用的答案。
    【解决方案2】:

    我不熟悉您正在使用的 .NET 库,但由于您正在执行可恢复上传,您能否将上传分成几段,每段耗时不到 100 秒?

    【讨论】:

      【解决方案3】:

      我不认为延长超时时间是个好习惯。

      我就是这样做的。谷歌 API 上传是 resumableUpload - 这意味着你他们支持将文件切割成块。 (并在出现问题时恢复)

      我就是这样做的:

         JobInfo = m_bigQueryService.Jobs.Insert(jobBody, sProject, file, "application/octet-stream");
      
                      // Chunk size in MB
                      JobInfo.ChunkSize = 1 * Google.Apis.Upload.ResumableUpload<Job>.MinimumChunkSize; // currently 250kb
                      int t = 1;
                      JobInfo.ProgressChanged += progress =>
                          {
                              // You can put what ever you like here - triggered after each chunk is uploaded
                          };
      
                      uploadProgress = JobInfo.Upload(); // Sync upload
      
      
                      if (uploadProgress.Status != UploadStatus.Completed)
                      {
                          // Do something
                      }
      

      您可以在此处阅读更多内容: https://developers.google.com/drive/manage-uploads#resumable

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-02
        相关资源
        最近更新 更多