У меня есть таблица в улье, DDL которой выглядит следующим образом:
CREATE TABLE test(id string) PARTITIONED BY (data_updated string,batch_id string,country string,state string);
data_updated=NO/batch_id=102/country='1'/state='A';
data_updated=NO/batch_id=103/country='2'/state='B';
data_updated=NO/batch_id=104/country='3'/state='C';
Я хочу переместить данные из data_updated = NO в data_updated = YES. И я делаю это с помощью команд HDFS.
data_updated=YES/batch_id=102/country='1'/state='A'
data_updated=YES/batch_id=103/country='2'/state='B'
data_updated=YES/batch_id=104/country='3'/state='C'
Один из вариантов - написать DDL с несколькими переименованными разделами. Но DDL с изменением раздела требуют, чтобы все разделы были указаны до N-го уровня. N-уровень является динамическим и не может быть определен статически.
Я получаю batch_ids с помощью скрипта unix и перемещаю каталог вручную с помощью команды перемещения в HDFS.
Inside a loop:
hadoop fs -mv /table/directory/data_processed=NO/batch_id=$i /table/directory/data_processed=YES/
Проблема с перемещением с помощью команд HDFS заключается в том, что после восстановления таблицы в кусте несуществующие разделы все еще существуют в метаданных улья. Как удалить несуществующие разделы из метаданных улья. Какие-либо предложения?
Вывод выставочного раздела в улье.
show partitions test;
data_updated=NO/batch_id=102/country='1'/state='A'; # NON-EXISTING
data_updated=NO/batch_id=103/country='2'/state='B'; # NON-EXISTING
data_updated=NO/batch_id=104/country='3'/state='C'; # NON-EXISTING
data_updated=YES/batch_id=102/country='1'/state='A'
data_updated=YES/batch_id=103/country='2'/state='B'
data_updated=YES/batch_id=104/country='3'/state='C'