Redshift出现relation does not exist错误 解析JSON数组为多行问题
报错原因
FROM子句的执行优先级高于SELECT子句,你在SELECT中定义的别名jp无法被FROM子句识别,所以会抛出relation "jp" does not exist的错误,且Redshift中展开super类型的JSON数组需要配合UNNEST函数使用。
可行解决方案
直接将JSON解析逻辑放到UNNEST函数内即可实现数组元素按行拆分,参考SQL如下:
SELECT JSON_PARSE(c.inputs)::super AS jp, d.desc, d.name, d.type, d.values FROM appen_collect.staticprompts AS c, UNNEST(JSON_PARSE(c.inputs)::super) AS d WHERE c.prompttype = 'input' LIMIT 10;
上述写法中的逗号连接等价于INNER JOIN LATERAL,只会保留inputs字段非空、JSON合法且数组长度≥1的原表记录。
可选优化配置
如果需要保留数组为空、JSON无效的原表记录,可以改用LEFT JOIN LATERAL写法,同时增加JSON合法性校验避免解析报错:
SELECT JSON_PARSE(c.inputs)::super AS jp, d.desc FROM appen_collect.staticprompts AS c LEFT JOIN LATERAL UNNEST(CASE WHEN IS_VALID_JSON(c.inputs) THEN JSON_PARSE(c.inputs)::super ELSE '[]'::super END) AS d ON TRUE WHERE c.prompttype = 'input' LIMIT 10;
内容的提问来源于stack exchange,提问作者Viktor Andriichuk
相关产品推荐
相关产品推荐

