wake-up-neo.com

Mehrere Tabellen mit demselben Präfix in Hive löschen

Ich habe einige Tabellen in Hive, die das gleiche Präfix wie unten haben.

temp_table_name
temp_table_add
temp_table_area

Es gibt wenige Hunderte solcher Tabellen in meiner Datenbank, zusammen mit vielen anderen Tabellen. Ich möchte Tabellen löschen, die mit "temp_table" beginnen. Wissen Sie, ob Sie eine Abfrage kennen, mit der dies in Hive funktioniert?

Es gibt keine regulären Ausdrücke für die Drop-Abfrage in Hive (oder ich habe sie nicht gefunden). Es gibt jedoch mehrere Möglichkeiten, dies zu tun:

  • Mit einem Shell-Skript:

    Hive -e "show tables 'temp_*'" | xargs -I '{}' Hive -e 'drop table {}'
    
  • Oder indem Sie Ihre Tabellen in einer bestimmten Datenbank ablegen und die gesamte Datenbank löschen.

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

Die oben genannten Lösungen sind gut. Wenn Sie jedoch mehr Tabellen zum Löschen haben, ist das Ausführen von 'Hive -e drop table' langsam. Also habe ich das benutzt:

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

verwenden Sie den vim-Editor, um file.hql zu öffnen und die folgenden Befehle auszuführen

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

dann renne 

Hive -f file.hql

Dieser Ansatz wird viel schneller sein.

5
Chandra

Ich konnte alle Tabellen mit den folgenden Schritten in Apache Spark mit Scala löschen: 

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

Da ich viele Tabellen löschen musste, habe ich den folgenden Befehl verwendet, der in der @HorusH-Antwort inspiriert ist

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

Meine Lösung bestand darin, das Bash-Skript mit dem folgenden Befehl zu verwenden:

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

schnellste Lösung durch ein Shell-Skript:

drop_tables.sh pattern

Shell-Skript-Inhalt:

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

Versuche dies:

Hive -e 'use sample_db; Tabellen anzeigen' | xargs -I '{}' Hive -e 'use sample_db; drop table {}'

0
Ganesh B

Der folgende Befehl funktioniert auch.

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