当对象名称是变量值时,在Redshift中提取JSON数组

时间:2016-10-06 21:51:56

标签: json parsing amazon-redshift

如果我使用不正确的术语,请提前表示道歉,我对JSON相对较新。我正在查询来自Amazon Redshift的数据。

以下是我看到的JSON数据示例:

{" id":{"姓名":[" name1"," name2"," name3" ]

我想获取包含名称的对象(最多可以包含15个名称)。通常情况下,这样做没有任何障碍:

选择json_extract_path_text(列,' id','名称')

但是,在这种情况下,我遇到了麻烦。 " id"是一个可变数字......它实际上是一个客户ID号。这意味着ID在每种情况下都会有所不同,因此一行可能包含:

{" 12345":{"姓名":[" Lisa"," Dave"," Sean" ]

而下一行可能包含:

{" 6789":{"姓名":[" Phil"," Jenny"]

Redshift支持的JSON功能尚未解决。我怎样才能获得"名称"每次路径元素不同时的对象?

1 个答案:

答案 0 :(得分:0)

您可以尝试使用Redshift用户定义函数(UDFS)。简单,易于测试和管理这样的要求。可以改进UDF以支持不同的参数和的信息。

    CREATE FUNCTION dynamic_json_extract_path_text (txt VARCHAR(20000) ) RETURNS VARCHAR(20000) IMMUTABLE AS $$
    import json
    try:
        data = json.loads(txt)
        for d in data:
            return json.dumps(data[d]['names'])
        return ''
    except:
        return ''
$$ LANGUAGE plpythonu;