2017-01-10 6 views
0

Я использую BIGQUERY в C# и пытаюсь сохранить запрос командой insert во временную таблицу.BigQuery - проверить состояние задания после вызова метода Вставить метод

Когда я запускаю команду j.Insert, вставка выполняется асинхронно (как следующий код), и я не могу гарантировать, что данные фактически вставлены полностью.

Есть ли способ проверить текущую текущую работу, узнать, когда задание завершено или нет (подождите, пока работа завершена).

Вот мой код (на основании, например, на: Create a table from Select Bigquery

добавить сон (5000) для того, чтобы guartantee, что работа была закончена, но это детерминированное решение

   // _bigQueryService is of type: BigQueryService. 
       // query is the main query (select ...) 
       JobsResource j = _bigQueryService.Jobs; 

      Job theJob = new Job(); 

      DateTime n = DateTime.UtcNow; 

      TableReference _destTempTable = new TableReference 
      { 
       ProjectId = "myprojectid", 
       DatasetId = "myDataSetId", 
       TableId = "myTempTable") 
      }; 
      theJob.Configuration = new JobConfiguration() 
      { 
       Query = new JobConfigurationQuery() 
       { 
        AllowLargeResults = true, 
        CreateDisposition = "CREATE_IF_NEEDED", /* CREATE_IF_NEEDED, CREATE_NEVER */ 
        DefaultDataset = "myDefaultDataSet", 
        MaximumBillingTier = 100, 
        DestinationTable = _destTempTable, 
        Query = query, 
       } 
      }; 
      var resJob = j.Insert(theJob, _settings.ProjetId).Execute(); 
      Thread.Sleep(5000); // *** I need better solution instead this line **** 

ответ

1

. . Вы можете использовать PollUntilCompleted() для проверки завершения, а не Thread.Sleep() в вашем случае, это было бы:

var resJob = j.Insert(theJob, _settings.ProjetId).Execute(); 
resJob.PollUntilCompleted(); 

вы с увидеть complete sample on Github, но соответствующая часть связана с Querying Data является:

public BigQueryResults AsyncQuery(string projectId, string datasetId, string tableId, 
    string query, BigQueryClient client) 
{ 
    var table = client.GetTable(projectId, datasetId, tableId); 
    BigQueryJob job = client.CreateQueryJob(query, 
     new CreateQueryJobOptions { UseQueryCache = false }); 

    // Wait for the job to complete. 
    job.PollUntilCompleted(); 

    // Then we can fetch the results, either via the job or by accessing 
    // the destination table. 
    return client.GetQueryResults(job.Reference.JobId); 
} 

Похоже, в новой библиотеке Google Cloud для C#, это можно было бы назвать PollQueryUntilCompletedbased on the documentation.

+0

Новая библиотека? Я исследую проблему с большим количеством запросов меньше месяца. Я проверю это. Я использую v2, но нет функции PollQueryUntilCompleted. Ваш ответ неплохой - мне нужно копать в ссылке, которую вы дали. спасибо. – Eitan