RedShift: оптимизация JSON парсера для отображения каждого значения в отдельной строке

У меня есть такие данные в RedShift (привожу запись таблицы сокращенно - две колонки):

column id: 210396
column inputs: [{"desc": "What is your credit card number? I promise to keep it real secure like.", "name": "cc", "type": "string", "regex": "\\d+", "max_length": 16, "min_length": 1}, {"max": "666", "min": "4", "desc": "How tall are you?", "name": "height", "type": "int"}, {"desc": "A nurse went to scribble a note when she realized she was trying to write with a rectal thermometer. Damn it, she said, some asshole has my pen.", "name": "likescake", "type": "bool"}]

Мне нужно сделать так, чтобы вытащить все значения для ключа name, values. name и values в записи может быть несколько, мне нужно их вытащить все отдельной строкой. И в values могут быть списки, значения из которых мне тоже нужно достать и для каждой записи нужно сделать свою строчку с name соответственно.

Запрос такой:

CREATE TEMP TABLE test_all_values AS 
(
SELECT c.*, d.desc, d.name, d.values 
FROM (
    SELECT id, created, JSON_PARSE(inputs) AS inputs_super
    FROM source.table
    WHERE prompttype = 'input'
    ) AS c, 
c.inputs_super AS d
ORDER BY created DESC                                                       
LIMIT 10  
);      
                                                       
                                                       
SELECT DISTINCT c.id, c.desc, c.name, o AS value FROM test_all_values c, c.values AS o;

С таблицей TEMP я получаю следующее:

column id: 210396
column created: 2021-09-01 05:42:15.80726
column inputs_super: [{"desc":" Please check the pledge box, Pledge content","name":"pledge","type":"dropdown","values":["Agree","Disagree"]}]
column desc: " Please check the pledge box, Pledge content"
column name: "pledge"
column values: ["Agree","Disagree"]

Но тут пока еще значения в колонке "values" в одном списке - мне их нужно вытащить и сложить в отдельные строки

Например:

column id: 210396
column created: 2021-09-01 05:42:15.80726
column inputs_super: [{"desc":" Please check the pledge box, Pledge content","name":"pledge","type":"dropdown","values":["Agree","Disagree"]}]
column desc: " Please check the pledge box, Pledge content"
column name: "pledge"
column values: ["Agree"]

column id: 210396
column created: 2021-09-01 05:42:15.80726
column inputs_super: [{"desc":" Please check the pledge box, Pledge content","name":"pledge","type":"dropdown","values":["Agree","Disagree"]}]
column desc: " Please check the pledge box, Pledge content"
column name: "pledge"
column values: ["Disagree"]

Как вы видите, я использую таблицу TEMP для того, чтобы распарсить список ["Agree","Disagree"] (из "values") (этот список имеет значение колонки SUPER).

Как я могу оптимизировать код, чтобы решить задачу без создания временной таблицы TEMP?

Спасибо за ваши советы!


Ответы (0 шт):