比较整数以返回BigQuery中的布尔值

时间:2017-03-02 12:04:41

标签: command-line google-bigquery type-conversion

运行大查询选择案例从命令行查询时。查看字符串时,查找数值并将其转换为整数 - 这需要与值进行比较并返回布尔值,以便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" ..."

1 个答案:

答案 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

希望这有帮助