2017-02-19 6 views
0

Я получаю сообщение об ошибке от BigQuery при выполнении основного запроса с шаблоном:BigQuery ошибка при использовании маски в «select * from ...» только при выполнении на GCE VM

bq query --use_legacy_sql=false "SELECT * FROM mydata.states LIMIT 10" 

Проблема в том, с * - вот ошибка, я получаю от Бк при его запуске на виртуальной машине в GCE:

Error in query string: Error processing job '...': Field 'workspace' not found in table 'mydata.states'. 

«рабочее пространство» это имя каталога, в моем текущем рабочем каталоге - оказывается, что Бк расширяется, что (аналогично ls *).

Эта же команда работает только в bq shell без расширения * в первый найденный ею каталог. Тот же запрос отлично работает на моем локальном ubuntu вне GCE.

Если я перечисляю столбцы явно, он отлично работает. Я не могу понять, что делает bq заменой * с именем каталога в моем текущем пути и как отключить его?

У меня есть две очень похожие машины, работающие bq версия командной строки 2.0.24 и обе являются ubuntu 14.04. Кроме этого, * работает в Баш так же, как и ожидалось, в том числе set -f, что останавливает расширение все вместе, но это не имеет никакого влияния на bq ...

Самое смешное, что * работает, как ожидалось при использовании в запросе, как это:

bq query --use_legacy_sql=false "SELECT COUNT(*) FROM mydata.states LIMIT 10" 

другая странная вещь, что это также работает отлично:

echo "SELECT * FROM mydata.states LIMIT 10" | bq query 

ответ

2

командной строки клиент BigQuery не расширяется сама *; это вызвано Башем. Лучшим долгосрочным решением было бы поместить ваш запрос в файл, например. my_query.sql. Тогда вы можете сделать:

bq query --use_legacy_sql=false < my_query.sql 

Теперь вам не нужно беспокоиться о побеге любой части запроса, так как текст запроса считывается из файла.

+0

Я согласен, что это работает и даже «эхо» $ QUERY »| bq query' работает, но я до сих пор не понимаю, что может вызвать ошибку на одной ОС Ubuntu и не будет иметь этой проблемы на другой машине Ubuntu ... –

+0

Возможно, вы используете другую оболочку в стороне от Bash, которая вызывает несоответствие , В любом случае, это не вызвано клиентом BigQuery. Возможно, вы захотите спросить другой тег StackOverflow. –