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?
Спасибо за ваши советы!