仅在GCE VM上执行时,在“select * from ...”中使用通配符时出现BigQuery错误

时间:2017-02-19 17:35:51

标签: google-bigquery

使用通配符运行基本查询时,我从BigQuery收到错误:

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

问题在于* - 这是我在GCE中在VM上运行时从bq获得的错误:

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

“workspace”是我当前工作目录中目录的名称 - 看起来bq正在扩展它(类似于ls *)。

相同的命令在bq shell中正常工作,而不会将*扩展到它找到的第一个目录。相同的查询在GCE之外的本地ubuntu上完全正常。

如果我明确列出列,它可以正常工作。我无法弄清楚是什么使bq用我当前路径中的目录名替换*以及如何禁用它?

我有两个非常相似的机器运行bq命令行版本2.0.24,两者都是ubuntu 14.04。除此之外,*正如预期的那样在bash中工作,包括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

1 个答案:

答案 0 :(得分:2)

BigQuery命令行客户端不会扩展*本身;这是由Bash引起的。最好的长期解决方案是将您的查询放入文件,例如my_query.sql。然后你可以这样做:

bq query --use_legacy_sql=false < my_query.sql

现在您无需担心转义查询的任何部分,因为从文件中读取查询文本。