Я недавно начал использовать AWS Glue для чтения некоторых файлов на S3.
После того, как я потратил много часов на поиск правильного гусеничного механизма, у меня есть три таблицы. Один из них называется raw
. Он содержит CSV-файлы в папках, разделенных на год / месяц / дату
Созданная схема показывает один конкретный столбец event_features
как string
.
Однако при выполнении запроса в Афине Iполучаю эту ошибку:
HIVE_PARTITION_SCHEMA_MISMATCH: There is a mismatch between the table and partition schemas. The types are incompatible and cannot be coerced. The column 'event_features' in table 'raw' is declared as type 'string', but partition '___' declared column 'event_features' as type 'array<string>'.
Действительно, я проверил, и значения для этого столбца могут быть:
[]
, который, как я понимаю, трактуется как строка, а непустой массив
или
[{'type':'value'},{'type':'value'}]
, который затем правильно интерпретируется как массив
Почему сканер принимает решение о строке, даже если это явно массив структур JSON? Что я могу сделать, чтобы это исправить? Я не могу найти опцию принудительного выбора типа столбца как массив / структура ..
Странно, но похожий столбец event_metrics
имеет точно такие же типы значений (иногда []
иногда массив jsons) и определен правильнокак массив
Я рассмотрел некоторые другие вопросы в StackOverlow и выбрал этот параметр в искателе:
Update all new and existing partitions with metadata from the table.
Но тип столбца не изменился ..
--- edit Единственное, что мне приходит в голову, - это написать собственный классификатор, но, надеюсь, я могу избежать этого