为啥 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 中无效?的主要内容,如果未能解决你的问题,请参考以下文章

测试在 UI 中更新但在控制台中没有更新,为啥?谁能告诉为啥控制台不更新?

为啥 JPA 提交在应用程序中失败,但在 JUnit 中有效?

为啥在 User::first() 上调用方法有效,但 User::where(...) 无效?

为啥此查询字符串在 Access 中有效,但在 C# 中无效?

为啥我的异步代码在控制器中有效,但在模型中无效?

为啥 JDBC 驱动程序调用在 Tomcat 中有效,但在 JBOSS 中无效