Таблицы являются просто метаданными и дешевыми ресурсами. Не беспокойтесь о том, чтобы сбросить и воссоздать их. В этой ситуации было бы лучше просто отбросить таблицу и создать новую.
Если вы действительно хотите избежать отбрасывания таблицы, вам необходимо удалить все разделы до или сразу после вас. изменить расположение таблицы.
Расположение таблицы и расположение ее разделов, к сожалению, не имеют никакого отношения друг к другу, они не связаны между собой. При изменении местоположения таблицы ранее добавленные разделы по-прежнему ассоциируются с таблицей. Затем, когда вы запускаете команду MSCK REPAIR TABLE
, она сильно сбивается с толку, так как смотрит на новое местоположение таблицы, находит разделы, и когда он перепроверяет те, у которых есть существующие разделы, метаданные не совпадают.
* * * * MSCK REPAIR TABLE
предполагает, что разделы располагаются ниже местоположения вашей таблицы. ALTER TABLE … SET LOCATION …
между тем, не учитывает допущения MSCK REPAIR TABLE
и просто делает то, что вам говорят, устанавливает местоположение таблицы, а также не переписывает расположение ее разделов. Одна из причин, по которой он этого не делает, заключается в том, что было бы неправильно делать это в других обстоятельствах - нет правила, согласно которому разделы должны иметь местоположения, связанные с местоположением таблицы. По крайней мере, в Афине расположение многораздельной таблицы в большинстве случаев бессмысленно, но такие команды, как MSCK REPAIR TABLE
и Glue Crawlers, используют его как подсказку, с которой следует начинать поиск данных. Команда Athena также модернизировала множество команд из Presto / Hive для запуска на Glue вместо Hive metastore, который не подходит один к одному, и некоторые вещи, вероятно, просто невозможно было бы сделать так, чтобы работать согласованно.
Вы можете увидеть, что произойдет, если вы используете Glue API для запроса вашей таблицы до и после изменения ее местоположения, используйте вызов API GetPartitions
, чтобы получить список разделов таблицу, и вы увидите, что они не меняются.
Кроме того, хотя использование MSCK REPAIR TABLE
, как вы делаете, работает нормально, просто вы знаете, это очень, очень медленно, когда вы получаете больше перегородки. Не полагайтесь на это, кроме как для загрузки нескольких разделов. Вы можете найти дополнительную информацию здесь , здесь , здесь , здесь и здесь .