AWS Glue - изменение столбца на тип массива или структуры - PullRequest
0 голосов
/ 06 ноября 2019

Я недавно начал использовать 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 Единственное, что мне приходит в голову, - это написать собственный классификатор, но, надеюсь, я могу избежать этого

...