2012-08-15 1 views
0

Я запускаю запрос BigQuery с помощью bq, который выбирает подмножество строк из одной таблицы в таблицу назначения.Инструмент командной строки bq мгновенно висит в памяти с --format = none

Наша команда выглядит следующим образом:

bq --format=none query --destination_table=dpm_legacy.unique_test [query] 

В командной строке я получаю:

Waiting on job_cda83335e0a4416ea9d4a2a0262d1ec7 ... (0s) Current status: RUNNING 
Waiting on job_cda83335e0a4416ea9d4a2a0262d1ec7 ... (10s) Current status: DONE 

Но тогда процесс зависает на некоторое время, и это процессор и использование памяти начинают не ползти вверх, пока она, наконец, существует без вывода.

Эмпирически кажется, что время, в течение которого инструмент висит, прямо пропорционален тому, насколько велика таблица назначения, возможно ли, что даже с флагом --format = none он все еще возвращает данные?

Спасибо!

ответ

3

bq пытается прочитать всю таблицу при ответе, даже если для формата установлено значение none. Один из способов предотвратить это - использовать --nosync, который немедленно выйдет и не дожидается завершения запроса. Я в процессе добавления флага -max_rows, который позволит вам указать, сколько строк вы хотите в результате (так что если вы не хотите ни одного, вы можете просто указать 0).

+0

FYI - Я только что представил исправление для этого, но вам нужно подождать до следующей версии bq. –

+0

Удивительный, спасибо! Он проверен на странице http://code.google.com/p/google-bigquery-tools? Мог бы это сделать из источника. –

+0

Он не зарегистрирован в публичном репозитории, но diff крошечный: (номера вашей строки могут не совпадать из-за переформатирования, которые мы делаем) @@ -965,8 +965,12 @@ + flags.DEFINE_integer ( + 'MAX_ROWS', 100, +, + flag_values ​​= бс 'Сколько строк, возвращаемых в результате.') @@ -990,9 +994,10 @@ - _PrintTable (клиент, работа [ 'configuration'] ['query'] ['destinationTable']) + _PrintTable (клиент, задание ['configuration'] ['query'] ['destinationTable'], + max_rows = FLAGS.max_rows) –