Hiveパーティションテーブルのメタデータを自動的に更新する方法は何ですか?
新しいパーティションデータがHDFSに追加された場合(alter table add partitionコマンドの実行なし)。次に、コマンド 'msck repair'を実行してメタデータを同期できます。
HDFSから多数のパーティション分割されたデータが削除された場合に実行すること(alter table drop partitionのコンマ実行を実行しない場合)。
Hiveメタデータを同期する方法は何ですか?
[〜#〜] edit [〜#〜]:Hive 3.0.0MSCK
は、次の構文を使用して、新しいパーティションを検出したり、欠落しているパーティション(またはその両方)を削除したりできるようになりました。
_MSCK [REPAIR] TABLE table_name [ADD/DROP/SYNC PARTITIONS]
_
これは Hive-17824 で実装されました
HakkiBuyukcengiz で正しく述べられているように、_MSCK REPAIR
_は、HDFS上の対応するフォルダーが手動で削除された場合、パーティションを削除せず、新しいフォルダーがの場合にのみパーティションを追加します作成しました。
公式からの抽出 ドキュメント :
つまり、HDFSには存在するがメタストアには存在しないパーティションをメタストアに追加します。
これは、HDFSで複数のパーティションフォルダーを手動で削除し、パーティションをすばやく更新したい場合に、external
テーブルがある場合に通常行うことです。
DROP TABLE table_name
_)(外部テーブルを削除しても、基になるパーティションファイルは削除されません)CREATE EXTERNAL TABLE table_name ...
_)MSCK REPAIR TABLE table_name
_)パーティションの数によっては、これに時間がかかる場合があります。もう1つの解決策は、削除されたパーティションフォルダごとにALTER TABLE DROP PARTITION (...)
を使用することですが、複数のパーティションが削除された場合、これは面倒な場合があります。
使ってみてください
MSCK REPAIR TABLE <tablename>;
テーブルが外部に設定されていることを確認し、すべてのパーティションを削除してから、テーブルの修復を実行します。
alter table mytable_name set TBLPROPERTIES('EXTERNAL'='TRUE')
alter table mytable_name drop if exists partition (`mypart_name` <> 'null');
msck repair table mytable_name;
msck修復でエラーがスローされた場合は、次のようにターミナルからHiveを実行します。Hive --hiveconf Hive.msck.path.validation=ignore
またはset Hive.msck.path.validation=ignore;