Ломаем Iceberg-таблицу🫠
Представьте, у вас есть айсберг таблица из 3 полей, которая управляется HMS. Вы удаляете из середины 2е поле, но вдруг появляется ошибка:
The following columns have types incompatible with the existing columns in their respective positions
Несовместимые типы, но почему? Мы же знаем, что айсберг следит за своими полями по id, и если мы удалили поле с id=2, то поле с id=3 должно таким и остаться. Или нет?
Оказывается, у айсберга и hms разные механизмы эволюции схемы. С айсбергом мы правы, он следит за id самой колонки. Но вот hms проверяет схему на основе индекса🙂
Когда мы удалили столбец из середины, в hms все типы сдвинулись. И если поле2 было int, а поле3 - string, то после удаления hms думает, что мы кастуем string -> int, и падает
Сама оф дока айсберга выделяет этот момент как «Hive Catalog Limitation» и рекомендует отключить свойство:
hive.metastore.disallow.incompatible.col.type.changes=false
Теперь эволюция схемы на совести айсберга, работаем дальше🙌
@data_engineerette