regexp_extract()
возвращает строку. Чтобы получить массив, используйте функцию split()
, в качестве шаблона-разделителя также используется регулярное выражение. Таким образом, вы можете разделить на ':\\d+,'
split(
regexp_replace(col, '^\\{|\\}$',''), --remove outer curly braces {}
':\\d+,' --array elements delimiter pattern
) --this will give array "agya", "gentong", etc
После взрыва массива вы можете удалить кавычки, используя regexp_replace(col_exploded,'\\"','')
Обновление
Последний ключ: значение не содержит ,
, поэтому необходимо исправить шаблон и использовать ,|$
(запятая или конец строки).
Также последний элемент будет пустым, его нужно отфильтровать.
Тест:
hive> select regexp_replace(key,'\\"','') key
> from
> (
> select explode(
> split(
> regexp_replace('{"agya":3,"gentong":1,"tronton":0,"tasikmalaya":4,"tanja":2}', '^\\{|\\}$',''), --remove outer curly braces {}
> ':\\d+(,|$)' --array elements delimiter pattern
> )
> ) as key
> )s
> where key!=''
> ;
OK
agya
gentong
tronton
tasikmalaya
tanja