web-dev-qa-db-fra.com

Supprimer plusieurs tables avec le même préfixe dans Hive

J'ai quelques tables dans Hive qui ont le même préfixe que ci-dessous ..

temp_table_name
temp_table_add
temp_table_area

Il y a quelques centaines de tables comme celle-ci dans ma base de données, ainsi que de nombreuses autres tables ... Je veux supprimer les tables commençant par "temp_table" . Est-ce que l'un de vous connaît une requête capable de faire ce travail dans Hive?

9

Il n’existe pas d’expressions régulières pour les requêtes directes dans Hive (ou je ne les ai pas trouvées). Mais il y a plusieurs façons de le faire, par exemple:

  • Avec un script shell:

    Hive -e "show tables 'temp_*'" | xargs -I '{}' Hive -e 'drop table {}'
    
  • Ou en plaçant vos tables dans une base de données spécifique et en supprimant toute la base de données.

    Create table temp.table_name;
    
    Drop database temp cascade;
    
14
Tremo

Les solutions ci-dessus sont bonnes. Mais si vous avez plus de tables à supprimer, l'exécution de 'Hive -e drop table' est lente. Donc, j'ai utilisé ceci:

Hive -e 'use db;show tables' | grep pattern > file.hql

utilisez l'éditeur vim pour ouvrir file.hql et exécuter les commandes ci-dessous

:%s!^!drop table  
:%s!$!;

puis courir 

Hive -f file.hql

Cette approche sera beaucoup plus rapide.

5
Chandra

J'ai pu supprimer toutes les tables en suivant les étapes suivantes dans Apache Spark avec Scala: 

val df = sql("SHOW TABLES IN default LIke 'invoice*'").select("tableName") // to  drop only selected column
val df = sql("SHOW TABLES IN default").select("tableName")
val tableNameList: List[String] = df.as[String].collect().toList
val df2 = tableNameList.map(tableName => sql(s"drop table ${tableName}"))
3
user1977823

Comme j'avais beaucoup de tables, j'ai utilisé la commande suivante, inspirée de la réponse @HorusH

Hive -e "show tables 'table_prefix*'" | sed -e 's/^/ \DROP TABLE db_name\./1' | sed -e 's/$/;/1' > script.sh
Hive -f script.sh
2
dirceusemighini

Ma solution a été d'utiliser le script bash avec le cmd suivant:

Hive -e "SHOW TABLES IN db LIKE 'schema*';" | grep "schema" | sed -e 's/^/Hive -e \"DROP TABLE db\./1' | sed -e 's/$/\"/1' > script.sh
chmod +x script.sh
./script.sh
2
HorusH

solution la plus rapide grâce à un script Shell:

drop_tables.sh pattern

Contenu du script shell:

Hive -e 'use db;show tables' | grep $1 | sed 's/^/drop table db./' | sed 's/$/;/' > temp.hql
Hive -f temp.hql
rm temp.hql
0
user2359902

Essaye ça:

Hive -e 'use sample_db; show tables' | xargs -I '{}' Hive -e 'utilise sample_db; drop table {}'

0
Ganesh B

La commande ci-dessous fonctionnera également.

 Hive -e 'show tables' | grep table_prefix |  while read line; do Hive -e "drop table $line"; done
0
kamoor