You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Pandas的AWS Redshift UDF解析多层JSON报错求助

问题排查与解决步骤

1. 函数名拼写不一致

你创建的函数是normaliza_json,但报错显示调用的是normalize_json(多了一个字母r),这是直接触发“函数不存在”错误的核心原因,先确认调用语句里的函数名和创建的完全一致。

2. 参数类型不匹配

如果调用时传入的参数不是text类型(比如直接传入json/super类型的列),Redshift会无法匹配到你定义的text参数签名的函数,从而报"unknown"类型错误。解决方式:

  • 调用时显式转换参数类型:
    SELECT normaliza_json(CAST(your_json_column AS text)) FROM your_table;
    
  • 或者修改UDF的参数类型为json/super,适配你的列类型。

3. UDF内部逻辑错误

你的函数返回类型定义为varchar(max),但pd.json_normalize(txt)返回的是Pandas DataFrame,无法直接转为字符串返回;同时传入的txt是字符串,需要先解析为Python可处理的JSON对象。修正后的UDF脚本:

CREATE OR REPLACE FUNCTION normaliza_json(txt text)
RETURNS varchar(max)
IMMUTABLE
LANGUAGE plpythonu
AS $$
import pandas as pd
import json

def normaliza_json(txt):
    # 将字符串解析为JSON对象
    json_data = json.loads(txt)
    # 归一化后转为JSON字符串返回
    return pd.json_normalize(json_data).to_json(orient='records')
$$;

4. 额外注意事项

  • Redshift的Python UDF对Pandas版本有要求,需确保使用的版本支持pd.json_normalize(需Pandas 1.0.0及以上)。
  • 上述脚本可处理单个JSON对象或JSON数组,最终返回JSON格式的字符串,方便后续在Redshift中进一步处理。

内容的提问来源于stack exchange,提问作者AIViz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 09:53:09