2016-06-19 2 views
0

Google 융합 테이블을 채 웁니다. 융합 표에 추가해야하는 약 2mio 항목이 있습니다.Google 퓨전 테이블 데이터 가져 오기시 할당량 초과

나는

Google.Apis.Fusiontables.v2 1.10.0.50 일부 개월간 맡았던 근무 사용할 수 있습니다. 하지만 지금은 예외를 초과하는 할당량을 얻습니다.

Google.Apis.Requests.RequestError 할당량 초과 [403] 오류 [ 메시지 [저장 용량이 초과] 위치 [-] 이유 [quotaExceeded] 도메인 [usageLimits]

있기 때문에 더 많은 데이터 이것은 놀라운 것이 아닙니다.

하지만 할당량을 보면 https://console.developers.google.com/apis/api/fusiontables/quotas에 아무런 제한이없는 것을 볼 수 있습니다.

또한 글로벌 할당량 대시 보드에서 나는 내가 쳤던 제한을 볼 수 없습니다.

테이블 당 250MB를 기록 할 것으로 생각했습니다. 하지만 데이터 소스를 다운로드 할 때 csv에만 40 MB가 있습니다 하지만이 파일은 읽기 전용 할당량이라고 생각합니까?

enter image description here

 private static void WriteItem() 
     { 
      await WriteAsync("map_data", index.AllEdges<BusEdge<TId>>().Where(x => x.MinFrequentPriceInEur > 0), (busEdge, csvWriter) => 
      { 
       WriteItem(busEdge, csvWriter); 

       itemHandled(); 
      }); 
     } 

    private static void WriteItem(BusEdge<TId> busEdge, CsvWriter csvWriter) 
    { 
     csvWriter.WriteField(Source.Id.ToString()); 
     csvWriter.WriteField(sink.Id.ToString()); 

     csvWriter.WriteField(string.Format(CultureInfo.InvariantCulture, "{0} {1}", 
      sink.Geolocation.Latitude, 
      sink.Geolocation.Longitude)); 

     csvWriter.WriteField(sink.Population); 

     foreach (Language language in Languages.AllLanguages) 
     { 
      csvWriter.WriteField(sink.DisplayName[language], true); 
     } 

     var priceWithDate = 
      busEdge.Prices.GroupBy(x => x.Value.MinimumFrequentInEur) 
       .OrderByDescending(x => x.Count()).SelectMany(x => x) 
       .OrderBy(x => x.Key) 
       .FirstOrDefault(); 

     double price = priceWithDate.Value.MinimumFrequentInEur; 

     csvWriter.WriteField(Math.Round(price, 2)); 
     csvWriter.WriteField(Math.Round(CurrencyInfo.EUR.ConvertMoney(price, CurrencyInfo.GBP), 2)); 
     csvWriter.WriteField(Math.Round(CurrencyInfo.EUR.ConvertMoney(price, CurrencyInfo.HRK), 2)); 
     csvWriter.WriteField(Math.Round(CurrencyInfo.EUR.ConvertMoney(price, CurrencyInfo.PLN), 2)); 
     csvWriter.WriteField(priceWithDate.Key.ToString("s")); 

    public static async Task WriteAsync<T>(string tableName, IEnumerable<T> list, Action<T, CsvWriter> writerAction) 
     { 
      using (FusiontablesService service = Connect()) 
      { 
       var tables = service.Table.List().Execute(); 
       var tableId = tables.Items.Where(x => x.Name == tableName).Select(x => x.TableId).First(); 

       MemoryStream memoryStream = new MemoryStream(); 

       bool hasWritten = false; 

       Func<Task> uploadAsync = async() => 
       { 
        if (memoryStream.Length > 0) 
        { 
         memoryStream.Position = 0; 

         ResumableUpload<string> request = 
          hasWritten ? 
           (ResumableUpload<string>)service.Table.ImportRows(tableId, memoryStream, "application/octet-stream") : 
           (ResumableUpload<string>)service.Table.ReplaceRows(tableId, memoryStream, "application/octet-stream"); 

         var response = await request.UploadAsync(); 

         if (response.Exception != null) 
         { 
          throw response.Exception; 
         } 

         memoryStream = new MemoryStream(); 

         hasWritten = true; 
        } 
       }; 

       using (StreamWriter writer = new StreamWriter(memoryStream, Encoding.UTF8, 1024, true)) 
       { 
        using (CsvWriter csvWriter = new CsvWriter(writer, new CsvConfiguration { Delimiter = "," })) 
        { 
         foreach (T item in list) 
         { 
          writerAction(item, csvWriter); 

          csvWriter.NextRecord(); 

          writer.Flush(); 

          if (memoryStream.Length >= Limit) 
          { 
           await uploadAsync(); 
          } 
         } 
        } 
       } 

       await uploadAsync(); 
      } 

내가 특정 제한을 찾을 수있는 방법 어떤 조언

? 코드 개선에 대한 권장 사항은 무엇입니까?

+0

Google 퓨전 테이블은 Google 드라이브에 특별한 저장 공간을 사용하며 [Google 개발자] (https://productforums.google.com/forum/?utm_medium=) 당 1GB입니다. 이메일 및 utm_source = 바닥 글 #! msg/google-fusion-tables/XXxVkTHDFQk/iCNSkjAAAQAJ). 융합 테이블이 여러 개인 경우 결합 된 크기가 1GB를 초과하는지 이미 확인하십시오. –

답변

0

이메일로 지원을 이메일로 보냈습니다. 그들은 그들이 보일 것이라고 말했다. 나는 새로운 것을 듣지 못했지만 그 다음날 아무런 변화없이 일했다.

이제 데이터가 약 20 % 증가했으며 여전히 작동합니다. Google 버그 인 것 같습니다.

관련 문제