Раздел обновления улья против ремонта MSCK

#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 на 1.
  2. Мы можем изменить базовое расположение таблицы и запустить команду 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;