2016-03-09 20 views
7

Mam kilka tabel w ulu, który ma taki sam prefiks jak poniżej ..spadnie wiele tabel z tego samego prefiksu w Ulu

temp_table_name 
temp_table_add 
temp_table_area 

Istnieje kilka setek tabel jak to w mojej bazy danych wraz z wieloma innymi tabelami. Chcę usunąć tabele rozpoczynające się od "temp_table". Czy ktoś z was zna jakieś zapytanie, które może wykonać tę pracę w Hive?

Odpowiedz

10

Nie ma czegoś takiego jak wyrażenia regularne do zapytania o zrzut w ulu (lub ich nie znalazłem). Ale są Nieograniczone sposoby to zrobić, na przykład:

  • ze skryptem powłoki:

    hive -e "show tables 'temp_*'" | xargs -I '{}' hive -e 'drop table {}' 
    
  • Albo poprzez umieszczenie swoich tabel w określonej bazie danych i upuszczając całej bazy danych.

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

ula -e temp_ „przedstawiają tabele” *”| xargs -I '{}' ul-e 'drop table {}' nie działa dla mnie – MysticForce

+2

Odpowiedź jest idealna, ale potrzebna jest niewielka zmiana, która faktycznie zadziałała dla mnie. Modyfikuję kod @Louxou, dodając podwójne cudzysłowy. Oto zaktualizowany kod. 'hive -e" pokaż tabele 'temp_ *' "| xargs -I '{}' hive -e 'drop table {}' ' –

0

Spróbuj tego:

ula -e 'use db_przykladowa; przedstawiają tabele' | xargs -I '{}' ula -e 'stosowanie db_przykladowa; drop table {}'

2

Moje rozwiązanie było użyć skryptu bash cmd z następujących czynności:

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

Poniżej polecenia będzie również działać.

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

Jak miałem wiele tabel należy upuszczać użyłem następującego polecenia, inspirowane odpowiedź @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 
3

powyższe rozwiązania są dobre. Ale jeśli masz więcej stołów do usunięcia, to uruchomienie 'ujmij-drop table' jest wolne. Więc użyłem tego:

ul-e "użyj db, pokaż tabele" | > File.hql

użycie edytora vim grep wzorzec otworzyć file.hql i uruchomić poniżej poleceń

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

następnie uruchomić

ula -f file.hql

Takie podejście będzie znacznie szybciej.

+0

Gdzie wspominasz tutaj wzór stołu do gry? –

+1

@Alex Raj Kaliamoorthy - grep 'pattern' – Chandra

0

najszybszym rozwiązaniem przez jeden skrypt powłoki:

drop_tables.sh pattern

Shell treść skryptu:

hive -e 'use db;show tables' | grep $1 | sed 's/^/drop table db./' | sed 's/$/;/' > temp.hql 
hive -f temp.hql 
rm temp.hql 
Powiązane problemy