1

ハイブに、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'
4

2 に答える 2