Импала - JSON - Как получить несколько значений одного и того же ключа в файле JSON - PullRequest
0 голосов
/ 07 ноября 2018

Например, у нас есть таблица, содержащая данные обычного поля и данные JSON.

IDa  Details 
a   [{"value":"1","idType":"ID"},{"value":"123","idType":"StudentID"},{"value":"777","idType":"NotRequired"}]
b   [{"value":"2","idType":"ID"},{"value":"111","idType":"StudentID"},{"value":"234","idType":"EmpID"}]
c   [{"value":"3","idType":"ID"},{"value":"222","idType":"StudentID"},{"value":"333","idType":"StudentID"},{"value":"444","idType":"StudentID"},{"value":"345","idType":"EmpID"}]

Я хочу получить таблицу, которая будет выглядеть ниже

IDa    ID    StudentID    EmpID
a       1     123          null 
b       2     111          234
c       3     222          345
c       3     333          345
c       3     444          345

В Impala ранее я придумал Case when...then, но он даст много нулевых значений для некоторой ячейки. Позже также придумали max(case when...then..), здесь будет пропущен какой-то другой идентификатор студента для того же идентификатора

select 
    IDa,
    max(case when p.idType='ID' then p.value end) as ID,
    max(case when p.idType='StudentID' then p.value end) as StudentID,
    max(case when p.idType='EmpID' then p.value end) as EmpID
from table, table.Details p
group by IDa

Но этот метод выберет самый большой StudentID для ID2, я хочу показать всю необходимую информацию.

...