Невозможно прочитать JSON в улье, имеющем escape-символ

#hadoop #hive

Вопрос:

У меня есть такая СТРОКА JSON

 {"feedback":{"timeepoch":1234355116561,"meta":{"zip":"201005","details":"{\"id\":\"12\"}"}}}  

Когда я создаю таблицу улья поверх расположения

 create table myschema.testtable (payload structlt;meta:maplt;string,stringgt;,timeepoch:bigintgt;) ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'   STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION  '/location/to/file/'  

я получаю ниже ошибку при выполнении запроса select

 Error: java.io.IOException: org.apache.hadoop.hive.serde2.SerDeException: java.io.IOException: Start of Object expected (state=,code=0)   

Но если мои данные поступают без escape-символа, то же самое работает.

 {"feedback":{"timeepoch":1234355116561,"meta:{"zip":"201005","details":"{"id":"12"}"}}}  

Как я могу использовать чтение json, имеющего escape-символ, и в данных, которые я не хочу иметь escape-символ в значениях столбцов

Комментарии:

1. JSONSerDe будет работать только с допустимым JSON без косых черт. если вы не можете удалить косые черты перед загрузкой файлов, то единственный вариант-создать таблицу в виде ТЕКСТОВОГО файла с одним столбцом, затем удалить лишние косые черты и проанализировать json с помощью json_tuple или get_json_object

2. Я тоже пробовал это, но это дает ошибку схемы diff Cannot insert into target table because column number/types are different. cannot convert column 0 to struct