加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

postgresql – Redshift / Postgres:如何忽略生成错误的行? (j

发布时间:2020-12-13 16:19:16 所属栏目:百科 来源:网络整理
导读:我正在尝试使用json_extract_path_text在redshift中运行查询.不幸的是,此数据库列中的某些 JSON条目无效. 怎么了: 当查询遇到无效的JSON值时,它会因“JSON解析错误”而停止. 我想要的:忽略该列中包含无效JSON的所有行,但返回可以解析JSON的任何行. 为什么
我正在尝试使用json_extract_path_text在redshift中运行查询.不幸的是,此数据库列中的某些 JSON条目无效.

怎么了:
当查询遇到无效的JSON值时,它会因“JSON解析错误”而停止.

我想要的:忽略该列中包含无效JSON的所有行,但返回可以解析JSON的任何行.

为什么我无法做到我想做的事情:我认为我不理解Redshift / Postgres中的错误处理.应该可以简单地跳过产生错误的任何行,但我尝试输入EXEC SQL WHENEVER SQLERROR CONTINUE(基于the Postgres docs)并在SQLERROR处或附近得到“语法错误”.

创建一个python UDF:
create or replace function f_json_ok(js varchar(65535)) 
returns boolean
immutable
as $$
    if js is None: 
        return None

    import json
    try:
        json.loads(js)
        return True
    except:
        return False
$$language plpythonu

像这样使用它:

select *
from schema.table
where 'DesiredValue' = 
    case 
        when f_json_ok(json_column) then json_extract_path_text(json_column,'Key') 
        else 'nope' 
    end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读