#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