Получение HIVE_CURSOR_ERROR при запросе таблицы в Athena

#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.