bigquery上传大(压缩)CSV 100秒超时

时间:2013-11-21 23:57:31

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

当尝试使用.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以避免超时的特定方法?

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:0)

我不熟悉您正在使用的.NET库,但由于您正在进行可恢复上传,您是否可以将上传内容分成每个不到100秒的内容?

答案 2 :(得分:0)

我认为延长超时是不错的做法。

我是怎么做到的。 Google API上传是resumableUpload - 这意味着您支持将文件切割为Chunks。 (并在出现问题时恢复)

这就是我做到的:

   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