#hive #bigdata #partition #hive-partitions #hiveddl
Вопрос:
У меня есть таблица с тысячами разделов. Я хочу изменить расположение всех разделов на другой кластер. Например:
для таблицы test_table и дня раздела=2021041600
Старое место: hdfs://cluster1/dir1/dir2/day=2021041600/<files>
Новое место: hdfs://cluster2/dir1/dir2/day=2021041600/<files>
Я могу добиться этого 2 способами.
- Мы можем получить список всех разделов и обновить расположение разделов для каждого раздела 1 на 1.
- Мы можем изменить базовое расположение таблицы и запустить команду MSCK repair для таблицы.
Мой вопрос в том, какой вариант нам лучше выбрать?
Ответ №1:
1-й подход сработает.
2-й подход (ремонт MSCK):
MSCK REPAIR
не будет работать, если вы измените расположение таблицы, так как разделы монтируются в старые расположения за пределами расположения таблицы.
Сделайте таблицу ВНЕШНЕЙ, УДАЛИТЕ, СОЗДАЙТЕ с новым местоположением, запустите ВОССТАНОВЛЕНИЕ MSCK:
alter table test_table SET TBLPROPERTIES('EXTERNAL'='TRUE');
drop table test_table;
create table test_table ... location 'hdfs://cluster2/dir1/dir2';
MSCK REPAIR TABLE test_table;