2017-08-06 21 views
1

私は約9,000のパーティションを持つテーブルを持っています。そのうちの約1200個(3日間を表す)を削除したいと考えています
hadoop fs -rmとこれらの3日間の正規表現を結合したいと思います。 pr_load_time=2017070([1-4])(\d+)のようなものです。正規表現を使用したHadoop fs -rm

パーティションは、この(私はここでは最初の2つだけにマッチしたい)

pr_load_time=20170701000317 
pr_load_time=20170704133602 
pr_load_time=20170705000317 
pr_load_time=20170706133602 

のように見えるが、この可能性のようなものですか?私はパーティションをawkとマッチングさせることを考えていましたが、xargsを使用していましたが、このような膨大な数のファイルを削除するのは本当に遅いアプローチです。私はコメントの上に推測

+1

もしあなたがn 'hadoop fs -rm"/path/pr_load_time = 20170701 * "'、... '" ... 0702 * "' ...など、それ以外の場合はワイルドカードの削除を1回だけ実行してください。 xargsやそれに類するコマンドを使って個別に削除してください。 – Jedi

+0

@Jediはい、一度やります。だから、7月4日にすべてを削除したいのであれば、私は20170704 *で始まり、その "04"の後にワイルドカードがすべてを気にしますか? –

+1

はい。あなたは 'rm'の代わりに' ls'を使って乾いた走りをすることができます。あなたは[二重引用符を必要とする](https://stackoverflow.com/a/32738462)。 – Jedi

答えて

2

あなたは、これは単一のコマンドで異なるパターンを組み合わせることができ、この

/hdfs path/pr_load_time=201707{01000317,04133602,05000317,..} 

のような場合

/hdfs path/pr_load_time={20170701000317,20170704133602,20170705000317,..} 

か何かで下記試みることができるが、あなたの問題を解決するだろう

/hdfs path/pr_load_time = 201707 {01 *、04 *、05 *、..}

関連する問題