Извлеките массив JSON в Redshift, если имя объекта является значением переменной

Если я использую неверную терминологию, я относительно новичок в JSON. Я запрашиваю данные из Amazon Redshift.

Ниже приведен пример данных JSON, которые я вижу:

{«id»: {«names»: [«name1», «name2″, » name3″]

Я хочу получить объект, содержащий имена (которых может быть до 15). Обычно это делает трюк без заминки:

выберите json_extract_path_text (столбец, ‘id’,’names’)

Однако в данном случае я нахожусь в тупике. «Id» — это переменный номер … на самом деле это номер клиента. Это означает, что идентификатор будет отличаться в каждом случае, поэтому одна строка может содержать:

{«12345»: {«names»: [«Lisa», «Dave», » Sean»]

в то время как следующая строка может содержать:

{«6789»: {«names»: [«Phil», » Jenny»]

Функции JSON, которые поддерживает Redshift, не работают. Как я могу получить объект «names», когда элемент path каждый раз отличается?

1 ответ

  1. Можно попробовать Redshift пользовательские функции (UDF). Легкий, простой для того чтобы испытать & управлять для такого требования. UDFs может быть уточнена для поддержки различных параметров и деталей.

        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;