Google bigquery 在“中使用通配符时出现BigQuery错误”;选择“从…中选择*;仅当在GCE虚拟机上执行时

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'. “工作区”是

使用通配符运行基本查询时,我从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正在扩展它(类似于
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标记下询问。