2017-08-06 6 views
1

J'ai une table avec 9k partitions, dont je voudrais supprimer environ 1200 (ce qui représente 3 jours)
Je voudrais combiner les hadoop fs -rm et les expressions régulières pour ces 3 jours, quelque chose comme pr_load_time=2017070([1-4])(\d+).Hadoop fs -rm avec l'expression régulière

Les partitions ressemblent à ceci (je veux correspondre seulement les deux premiers ici)

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

Est-ce quelque chose comme cela possible? Je pensais à faire correspondre les partitions avec awk et utiliser xargs, mais cela semble être une approche très lente pour supprimer un si grand nombre de fichiers.

+1

Si c'est quelque chose que vous n Exécuté une seule fois, exécutez 4 suppressions génériques: 'hadoop fs -rm"/chemin/pr_load_time = 20170701 * "', ... '" ... 0702 * "' ..., etc. Sinon, vous devrez probablement les supprimer individuellement en utilisant xargs ou des commandes similaires – Jedi

+0

@Jedi oui, j'ai juste besoin de le faire une fois. Donc, si je veux tout supprimer pour le 4 juillet, je commence juste avec 20170704 * et le caractère générique prendra soin de tout après ce "04"? –

+1

Oui. Vous pouvez faire une course sèche en utilisant 'ls' au lieu de' rm'. Vous auriez [besoin de guillemets doubles] (https://stackoverflow.com/a/32738462). – Jedi

Répondre

2

Je pense que ci-dessus commentaire résoudrait votre problème mais vous pouvez essayer ci-dessous en cas

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

ou quelque chose comme ça

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

cela peut combiner modèle différent en simple commande

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