ハイブに、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'
1 つのオプションは、複数の名前変更パーティション DDL を作成することです。ただし、alter partition DDL では、すべてのパーティションを N 番目のレベルまで指定する必要があります。N レベルは動的であり、静的に決定することはできません。
unix スクリプトを使用して batch_ids を取得し、HDFS で move コマンドを使用してディレクトリを手動で移動しています。
Inside a loop:
hadoop fs -mv /table/directory/data_processed=NO/batch_id=$i /table/directory/data_processed=YES/
HDFS コマンドで移動する際の問題は、ハイブでテーブルを修復した後、存在しないパーティションがまだハイブ メタデータに存在することです。ハイブ メタデータから存在しないパーティションを削除する方法。助言がありますか?
ハイブでの show partition の出力。
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'