У меня есть таблица, определенная в AWS Glue. Я использую потоки AWS Kinesis для потоковой передачи журналов в S3, используя это определение таблицы, используя формат файла паркета. Он разделен по дате.
Одним из полей в таблице является структура с несколькими полями, event_payload
, одно из которых - массив структур. Недавно я добавил новое поле во внутреннюю структуру данных журнала. Я хочу добавить его в определение таблицы, чтобы он был записан в S3, и чтобы я мог запросить его с помощью AWS Athena.
Я попытался редактировать схему таблицы непосредственно в консоли. Он записывает данные в S3, но я получаю исключение в Афине при запросе:
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_payload' in table 'c2s.logs' is declared as type 'struct<...>', but partition 'year=2019/month=201910/day=20191026/hour=2019102623' declared column 'event_payload' as type 'struct<...>'.
Я попытался удалить все разделы и восстановить таблицу, как указано здесь , но я получил другую ошибку:
HIVE_CANNOT_OPEN_SPLIT: Error opening Hive split s3://.../year=2019/month=201910/day=20191022/hour=2019102216/beaconFirehose-4-2019-10-22-16-34-21-71f183d2-207e-4ae9-98fe-07dda0bab70c.parquet (offset=0, length=801679): Schema mismatch, metastore schema for row column event_payload.markings.element has 8 fields but parquet schema has 7 fields
Итак, в схеме есть поле, которого нет в данных. Есть ли способ указать необязательное поле? Если его нет, просто сделайте его пустым.