#sql #json #hive #special-characters #hiveql
Вопрос:
У меня есть таблица со строковым столбцом, который содержит данные в формате JSON. Затем я использую эту функцию get_json_object
для анализа некоторых данных из нее. Проблема в том, что одно из моих полей содержит a .
в своем имени. Таким образом, если написать имя поля обычным текстом, функция будет интерпретировать его как дочерний оператор.
Вот пример кода, который работает:
select get_json_object(col, '$.rootkey')
from (select '{"rootkey":15,"key.a":16,"key.b":17}' as col) test;
Но это не удается:
select get_json_object(col, '$.key.a')
from (select '{"rootkey":15,"key.a":16,"key.b":17}' as col) test;
Есть ли какой-либо способ избежать .
этого в get_json_object
функции?
Ответ №1:
В настоящее время get_json_object() не поддерживает экранирование, см. HIVE-2927
Обходной путь заключается в использовании lateral view json_tuple()
:
select v.rootkey, v.key_a, v.key_b
from (select '{"rootkey":15,"key.a":16,"key.b":17}' as col) test
lateral view json_tuple(col, 'rootkey', 'key.a','key.b') v as rootkey, key_a, key_b
;
Результат:
v.rootkey v.key_a v.key_b
15 16 17
Комментарии:
1. Спасибо, что указали на обсуждение в jira!