运行大查询选择案例从命令行查询时。查看字符串时,查找数值并将其转换为整数 - 这需要与值进行比较并返回布尔值,以便case语句有效。
bq query SELECT case when integer(right(strWithNumb,8))> 10000000 then right(strWithNumb,8) else "no" end FROM [Project:bucket.mytable]
返回
" CASE期望WHEN表达式为布尔值。"
我试过了:
boolean(integer(right(strWithNumb,8))> 10000000)
但得到了
"期待:" WHEN" ..."
答案 0 :(得分:1)
即使您的原始查询在Web UI中有效 - 它在bq命令行工具中失败取决于您的环境 - 例如,如果您在PC上
尝试使用>
转义^
字符,并使用"
包含整个查询,如下例所示。另请注意"
"no"
的转义
bq query "SELECT case when integer(right(strWithNumb,8)) ^> 10000000 then right(strWithNumb,8) else \"no\" end FROM [Project:bucket.mytable]"
您可以稍后将"
更改为'
bq query "SELECT case when integer(right(strWithNumb,8)) ^> 10000000 then right(strWithNumb,8) else 'no' end FROM [Project:bucket.mytable]"
更多解释:
当您执行原始命令时(例如通过Google Cloud SDK Shell在PC上),您的实际查询将如下所示
SELECT case when integer(right(strWithNumb,8)) then right(strWithNumb,8) else "no" end FROM [Project:bucket.mytable]
正如您所看到的> 10000000
部分查询丢失,因此WHEN
表达INTEGER
而非预期BOOLEAN
希望这有帮助