Структуры массива, запрашивающие в presto, улье - PullRequest
0 голосов
/ 13 мая 2018

col-1 имеет dep_id (varchar) -

112 

col-2 имеет массив struct

 [
  {
    "emp_id": 8291828,
    "name": "bruce",
  },
  {
    "emp_id": 8291823,
    "name": "Rolli",
  }
]

У меня есть случай, когда мне нужно сгладить и отобразить результаты.Например, при запросе данных для dep_id - 112 мне нужно отобразить emp_id в отдельной строке.Для указанных выше данных при запросе мой результат должен выглядеть следующим образом:

id  emp_id
112 8291828
112 8291823

Каким должен быть мой формат запроса для получения данных?

1 Ответ

0 голосов
/ 14 мая 2018

Есть несколько частей, чтобы сделать эту работу.Сначала данные JSON будут отображаться как VARCHAR, поэтому сначала нужно запустить json_parse, чтобы преобразовать их в тип JSON в движке.Затем вы можете привести JSON типов к нормальным структурным типам SQL, и в вашем случае это массив строк (см. Приведение из JSON) .Наконец, вы делаете перекрестное соединение с массивом строк (который фактически является вложенной таблицей).Заполнение этого запроса даст вам результаты, которые вы хотите

WITH your_table AS (
    SELECT
        112 AS dep_id
        , '[{"emp_id": 8291828, "name": "bruce"}, {"emp_id": 8291823, "name": "Rolli"}]' AS data
)
SELECT
    dep_id
    , r.emp_id
    , r.name
FROM your_table
CROSS JOIN
    UNNEST(cast(json_parse(data) as array(row (emp_id bigint, name varchar)))) nested_data(r)    
...