2016-03-09 5 views
7

Ich habe einige Tabellen in Struktur, die gleichen Präfix wie unten hat ..Dropping mehr Tabellen mit demselben Präfix in Hive

temp_table_name 
temp_table_add 
temp_table_area 

Es gibt nur wenige Hunderte von Tabellen wie diese in der Datenbank zusammen mit vielen anderen Tabellen. Ich möchte Tabellen löschen, die mit "temp_table" beginnen. Kennt jemand von Ihnen irgendeine Frage, die diese Arbeit in Hive erledigen kann?

Antwort

10

Es gibt keine regulären Ausdrücke für Drop-Abfrage in Hive (oder ich habe sie nicht gefunden). Aber es gibt multipe Möglichkeiten, es zu tun, zum Beispiel:

  • Mit einem Shell-Skript:

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

    Create table temp.table_name; 
    
    Drop database temp cascade; 
    
+0

hive -e ‚show tables‚temp_ *‘| xargs -I '{}' hive -e 'drop table {}' funktioniert nicht für mich – MysticForce

+2

Die Antwort ist perfekt, aber es gibt eine kleine Änderung, die tatsächlich für mich funktioniert hat. Ich ändere @Louxous Code ein bisschen, indem ich doppelte Anführungszeichen hinzufüge. Hier ist der aktualisierte Code. 'hive -e" zeige Tabellen 'temp_ *' "| xargs -I '{}' hive -e 'drop table {}' ' –

0

Versuchen Sie folgendes:

hive -e 'Verwendung sample_db; show tables' | xargs -I '{}' hive -e 'Verwendung sample_db; drop table {}'

2

Meine Lösung Bash-Skript mit dem folgenden cmd zu verwenden gewesen:

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 
0

Im Folgenden Befehl wird auch funktionieren.

hive -e 'show tables' | grep table_prefix | while read line; do hive -e "drop table $line"; done 
2

Wie ich viele Tische hatte nicht fallen verwendete ich den folgenden Befehl ein, in der @HorusH Antwort inspiriert

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

Above Lösungen gut sind. Wenn Sie jedoch mehr Tabellen löschen müssen, ist die Ausführung von 'hive -e drop table' langsam. Also, ich habe folgendes verwendet:

hive -e 'db verwenden; Tabellen anzeigen' | grep Muster> file.hql

Verwendung vim Editor file.hql zu öffnen und unter Befehle

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

dann

hive laufen -f

Dieser Ansatz file.hql wird viel schneller sein.

+0

Wo erwähnen Sie das Match-Tabellenmuster hier? –

+1

@Alex Raj Kaliamoorthy - Grep 'Muster' – Chandra

0

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 
Verwandte Themen