Bigquery错误,“无法解析带括号的表达式”

时间:2019-01-28 15:17:10

标签: sql google-bigquery

你好,我有下一个代码,当我在Bigquery中运行它时,它给了我“正确”的答案,但是当我将其放入sh脚本并在google shell vm中执行该脚本时,我遇到了下一个错误。有什么想法吗?

我认为错误在于需要将case / when语句的结果乘以另一个case / when语句。

这是我的代码的示例:

SELECT  CASE WHEN (
           (CASE WHEN TABLE1.COL1 = 'X' THEN 0 ELSE 1 END) *
       (CASE WHEN TABLE2.COL2 = 'Y' THEN 1 ELSE 0 END) *
       (CASE WHEN (SELECT 0 
                       FROM TABLE3
                       WHERE TABLE3.ID = TABLE2.ID) = 0 THEN 0 ELSE 1 END)) = 1
    THEN (SELECT '111111') ELSE NULL END
FROM TABLE1
INNER JOIN TABLE2
ON TABLE1.ID = TABLE2.ID
FULL JOIN (SELECT COL1,'TRUE' FROM TABLE4) AS XX
ON XX.COL1 = TABLE1.COL1 AND XX.COL1 IS NULL
WHERE
  TABLE1.COL3 = 'YY'

我无法提供预期的结果,但是该查询的结果给了我下一个错误:带括号的表达式无法解析为 表达式,结构构造函数或子查询位于...

2 个答案:

答案 0 :(得分:1)

我将发布调试提示作为答案,因为我认为您可能会以这种方式发现问题。在命令行提示符下,列出最近的作业:

bq ls -j --all

失败的查询作业可能会在顶部。复制作业ID并将其与下一个命令一起使用:

bq --prettyformat=json show -j YOUR_JOB_ID

这将打印出完整的作业配置以及错误消息。我怀疑您会看到查询是乱码;用Shell解释时,引号或其他字符可能引起了意外的行为。从命令行执行查询时,最好将内容放入文件中,然后将其作为输入传递给bq工具,例如

bq query --use_legacy_sql=false < query.sql

这可以防止外壳程序作为命令拦截查询的任何部分。

答案 1 :(得分:0)

感谢@Elliott Brossard,我解决了这个问题,代码实际上没有任何变化,哈哈。因此,我所做的就是重写bq查询语句,例如:bq query --destination_table = .. --use_legacy_sql = false --replace'QUERY'而不是将查询分配给变量,然后使用echo执行它。 bq查询语句..

谢谢