使用通配符运行基本查询时,我从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
答案 0 :(得分:2)
BigQuery命令行客户端不会扩展*
本身;这是由Bash引起的。最好的长期解决方案是将您的查询放入文件,例如my_query.sql
。然后你可以这样做:
bq query --use_legacy_sql=false < my_query.sql
现在您无需担心转义查询的任何部分,因为从文件中读取查询文本。