Получить конкретные значения из строки в улье - PullRequest
1 голос
/ 23 мая 2019

У меня есть таблица улья с двумя столбцами, оба являются строками

name            details
"john" , {"addr":"NY","phone":"1234"}
"john" , {"addr":"CA", "phone":"7145"}
"mary" , {"addr":"BOS","phone":"1234"}  

Есть ли способ преобразовать строковый столбец в сортировку JSON для доступа к значениям по ключу.Пример, если я выполню запрос

SELECT name, details['addr'] , details['phone'] FROM table_a;

Я должен получить Джон, Нью-Йорк, 1234 Джон, Калифорния, 7145 Мэри, ЛС, 1234

Ответы [ 2 ]

0 голосов
/ 23 мая 2019

Еще один метод с использованием str_to_map:

select name, details_map['addr'] as addr , details_map['phone'] as phone
from 
(
select name, str_to_map(regexp_replace(details,'\\{|\\}| ?\\"','')) as details_map
from your_table
)s;
0 голосов
/ 23 мая 2019

Вы можете использовать get_json_object, а затем получить доступ к addr и phone из строки.

hive>  with cte as (
        select string('"john"')col1,
               string('{"addr":"NY","phone":"1234"}')col2)
        select regexp_replace(col1,"\"","")col1,get_json_object(col2,'$.addr')col2 
        from cte;

Result:

col1    col2
john    NY

Чтобы избежать кавычек, мы также можем использовать csv serde с символом кавычки, как описано здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...