2015-01-27 2 views
1

Я выполняю некоторые длинные запросы с использованием java-клиента большого запроса.Bigquery Api Java-клиент с прерывистым возвратом плохих результатов

Я построить работу большого запроса и выполнить как этот

val queryRequest = new QueryRequest().setQuery(query) 
val queryJob = client.jobs().query(ProjectId, queryRequest) 
queryJob.execute() 

Проблема я обращенную это для того же самого запроса, клиент возвращает до завершения задания т.е. количество строк в результате является нуль.

Я попытался напечатать ответ, и это показывает

{"jobComplete":false,"jobReference":{"jobId":"job_bTLRGrw5_xR26i9Li3a9EQvuA6c","projectId":"analytics-production"},"kind":"bigquery#queryResponse"} 

Из того, что я могу видеть, что работа не завершена. Почему клиент вернулся до завершения задания?

При построении клиента я использую HttpRequestInitializer, а в методе инициализации я предоставляю параметры таймаута.

override def initialize(request: HttpRequest): Unit = { 
    request.setConnectTimeout(...) 
    request.setReadTimeout(...) 
} 

Пробовал давать высокие значения для таймаута, например, 240 секунд и т. Д., Но не повезло. Поведение все тот же. Он терпит неудачу.

ответ

2

Убедитесь, что вы установите тайм-аут на тело запроса Bigquery, а не объект HTTP.

val queryRequest = new QueryRequest().setQuery(query).setTimeoutMs(10000) //10 seconds 

Параметр timeoutMs. Это задокументировано здесь: https://cloud.google.com/bigquery/docs/reference/v2/jobs/query

Просьба также ознакомиться с документами относительно этого поля: как долго ждать завершения запроса в миллисекундах до того, как запрос истечет и вернется. Обратите внимание, что это только время ожидания запроса, а не запрос. Если запрос занимает больше времени, чем значение таймаута, вызов возвращается без каких-либо результатов, а флаг «jobComplete» установлен на false. Вы можете вызвать GetQueryResults(), чтобы дождаться завершения запроса и прочитать результаты. Значение по умолчанию - 10000 миллисекунд (10 секунд).

Подробнее о синхронных запросов здесь
https://cloud.google.com/bigquery/querying-data#syncqueries

+0

SetQuery(). SetTimeoutMs() решить эту проблему для меня !! –

+0

Как работает request.setReadTimeout() и setQuery(). SetTimeoutMs()? –

+0

'setReadTimeout' предназначен для самого соединения, пока он остается открытым. 'setQuery timeout' для самого запроса. – Pentium10

 Смежные вопросы

  • Нет связанных вопросов^_^