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?
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;
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.
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}"))
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
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
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
Essaye ça:
Hive -e 'use sample_db; show tables' | xargs -I '{}' Hive -e 'utilise sample_db; drop table {}'
La commande ci-dessous fonctionnera également.
Hive -e 'show tables' | grep table_prefix | while read line; do Hive -e "drop table $line"; done