#amazon-web-services #amazon-s3 #aws-glue #amazon-athena
#amazon-web-services #amazon-s3 #aws-glue #amazon-athena
Вопрос:
Похоже, это известная проблема, но мой сценарий немного отличается. Источником данных моей таблицы Athena является корзина s3, и у меня есть задание сканера, считывающее его для построения таблицы. Serde serialization lib устанавливается как org.openx.data.jsonserde.JsonSerDe
автоматически.
Помимо исправления этого, мне также интересно, как я мог найти, какая запись или файл s3 вызвали эту проблему. Поскольку я не могу вручную проверять файл s3 по файлам, он слишком огромен, и я не могу запросить Athena. Спасибо.
Сообщение об ошибке:
HIVE_CURSOR_ERROR: Row is not a valid JSON Object - JSONException: Illegal escape. at 99 [character 100 line 1]
Комментарии:
1. обновление: я смог пропустить эти неверные данные с помощью решения здесь: forums.aws.amazon.com/message.jspa?messageID=881557 но до сих пор не имею ни малейшего представления о том, как определить, где была допущена ошибка
Ответ №1:
Вы можете игнорировать неверно сформированный json, это гарантирует, что вы сможете запросить таблицу, как описано в рекомендациях AWS по чтению данных JSON:
...
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES ('ignore.malformed.json' = 'true')
LOCATION 's3://bucket/path/';
Я бы начал с этого, чтобы убедиться, что хотя бы некоторые данные могут быть прочитаны.
Athena также предлагает показать базовый файл записи с помощью "$path"
:
SELECT "$path" FROM "my_database"."my_table"
Это может открыть возможности для проверки количества строк в каждом файле, а затем проверить, какой файл не может быть полностью прочитан Athena.