为啥 WHERE 在 Web UI 中有效,但在 gsutil 中无效?

Posted

技术标签:

【中文标题】为啥 WHERE 在 Web UI 中有效,但在 gsutil 中无效?【英文标题】:Why does WHERE work in Web UI but not in gsutil?为什么 WHERE 在 Web UI 中有效,但在 gsutil 中无效? 【发布时间】:2018-09-01 10:18:26 【问题描述】:

当我使用bigquery web ui 查询表时,以下工作:

select * from my_table where record_datetime > '2017-01-01 00:00:00' limit 10

但是当我使用bq 运行相同的命令时,它会中断:

bq query  --use_legacy_sql=false select * FROM `mlp-1385.data.historical_bk`  where record_datetime > '2017-01-01 00:00:00' limit 10

我得到了错误:

Error in query string: Error processing job
'mlp-1385:bqjob_XXXXXXXX': WHERE clause should return
WHERE clause should return
type BOOL, but returns FLOAT64

当我删除 where 子句时,一切都在 webui 和 gsutil 中运行。

如何修复我的命令行查询?

【问题讨论】:

【参考方案1】:

在 google 的 gsutil 中运行查询时,您必须使用 ^ 运算符转义 <>,否则命令行会将它们视为重定向。

例如,< 变为 ^<> 变为 ^>

所以我的命令行命令应该是:

bq query  --use_legacy_sql=false select * FROM `mlp-1385.data.historical_bk`  where record_datetime ^> '2017-01-01 00:00:00' limit 10

【讨论】:

您还可以通过管道从文件中输入输入,这通常是一种更好的方法,因此您无需担心转义。 bq query --use_legacy_sql=false < my_query.sql

以上是关于为啥 WHERE 在 Web UI 中有效,但在 gsutil 中无效?的主要内容,如果未能解决你的问题,请参考以下文章