Google bigquery 在“中使用通配符时出现BigQuery错误”;选择“从…中选择*;仅当在GCE虚拟机上执行时
使用通配符运行基本查询时,我从BigQuery中得到一个错误:Google bigquery 在“中使用通配符时出现BigQuery错误”;选择“从…中选择*;仅当在GCE虚拟机上执行时,google-bigquery,Google Bigquery,使用通配符运行基本查询时,我从BigQuery中得到一个错误: bq query --use_legacy_sql=false "SELECT * FROM mydata.states LIMIT 10" 问题在于*-以下是我在GCE中的VM上运行bq时从bq得到的错误: Error in query string: Error processing job '...': Field 'workspace' not found in table 'mydata.states'. “工作区”是
bq query --use_legacy_sql=false "SELECT * FROM mydata.states LIMIT 10"
问题在于*
-以下是我在GCE中的VM上运行bq时从bq得到的错误:
Error in query string: Error processing job '...': Field 'workspace' not found in table 'mydata.states'.
“工作区”是我当前工作目录中目录的名称-似乎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
BigQuery命令行客户端不展开
*
本身;那是由Bash引起的。最好的长期解决方案是将查询放入一个文件中,例如my_query.sql
。然后你可以做:
bq query --use_legacy_sql=false < my_query.sql
bq查询——使用\u legacy\u sql=false
现在您不必担心转义查询的任何部分,因为查询文本是从文件中读取的。BigQuery命令行客户端不展开
*
本身;那是由Bash引起的。最好的长期解决方案是将查询放入一个文件中,例如my_query.sql
。然后你可以做:
bq query --use_legacy_sql=false < my_query.sql
bq查询——使用\u legacy\u sql=false
现在,您不必担心转义查询的任何部分,因为查询文本是从文件中读取的。我同意这是可行的,甚至
echo“$query”| bq query
,但我仍然不明白是什么原因导致了一个Ubuntu操作系统出现错误,而另一台Ubuntu机器却没有出现这个问题……可能是因为除了Bash之外,您使用的是另一个shell导致了这种差异。无论如何,这不是由BigQuery客户端引起的。你可能想在另一个StackOverflow标签下提问。我同意这是可行的,甚至echo“$QUERY”| bq QUERY
,但我仍然不明白是什么原因导致了一个Ubuntu操作系统出现错误,而另一台Ubuntu机器却没有出现这个问题……可能是因为除了Bash之外,您使用的是另一个shell导致了这种差异。无论如何,这不是由BigQuery客户端引起的。您可能需要在另一个StackOverflow标记下询问。