QueryRecord组件CASE WHEN语句输出值含多余空格问题排查
问题描述
我有如下JSON文件:
[ { "id": 1 }, { "id": 2 } ]
同时存在属性ad.cost_type,当前值为0。我希望基于该属性修改JSON,于是在QueryRecord中编写了类SQL脚本:
SELECT CASE WHEN ${ad.cost_type} = 0 THEN 'cpc' WHEN ${ad.cost_type} = 1 THEN 'cpm' WHEN ${ad.cost_type} = 3 THEN 'ocpm' END AS type * FROM FLOWFILE
执行后得到结果:
[ { "type" : "cpc ", "id": 1 }, { "type" : "cpc ", "id": 2 } ]
可见输出的type字段值后带有多余空格,不清楚该空格来源,请问遗漏了什么?
问题原因及解决方法
- 字符串字面量含尾空格:你编写CASE语句时,
'cpc'这类字符串的行尾可能不小心输入了空格——SQL引擎会将行尾的空白字符当作字符串的一部分解析,最终出现在结果中。建议检查并删除每个THEN子句字符串后的多余空格,确保'cpc'、'cpm'等内容后无空白再换行。 - SELECT语句语法不规范:你的SELECT子句中,
END AS type与*之间缺少逗号,这不符合SQL语法规范。虽然QueryRecord未直接报错,但异常的语法解析可能间接引发空格问题。正确写法应为:
SELECT CASE WHEN ${ad.cost_type} = 0 THEN 'cpc' WHEN ${ad.cost_type} = 1 THEN 'cpm' WHEN ${ad.cost_type} = 3 THEN 'ocpm' END AS type, * FROM FLOWFILE
你也可以尝试将CASE语句压缩为一行,从根源避免行尾空格的影响:
SELECT CASE WHEN ${ad.cost_type}=0 THEN 'cpc' WHEN ${ad.cost_type}=1 THEN 'cpm' WHEN ${ad.cost_type}=3 THEN 'ocpm' END AS type, * FROM FLOWFILE
内容的提问来源于stack exchange,提问作者fujidaon
相关产品推荐
相关产品推荐

