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

问题描述 投票:0回答:2

你好,我有下一个代码,当我在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'

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

sql google-bigquery
2个回答
1
投票

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

bq ls -j --all

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

bq --prettyformat=json show -j YOUR_JOB_ID

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

bq query --use_legacy_sql=false < query.sql

这可以防止shell作为命令拦截查询的任何部分。


0
投票

谢谢@Elliott Brossard,我解决了这个问题,但代码中没有任何变化。所以我所做的是重写bq查询句子,如:bq query --destination_table = .. - use_legacy_sql = false --replace'QUERY'而不是将查询分配给变量,然后使用echo |来执行它。 bq查询句子..

谢谢

© www.soinside.com 2019 - 2024. All rights reserved.