2016-03-09 16 views
7

Tôi có vài bảng trong tổ ong có cùng tiền tố như dưới đây ..Thả nhiều bảng với cùng một tiền tố trong Hive

temp_table_name 
temp_table_add 
temp_table_area 

Có vài trăm bảng như thế này trong cơ sở dữ liệu của tôi cùng với nhiều bảng khác. Tôi muốn xóa bảng bắt đầu bằng "temp_table". Bạn có biết bất kỳ truy vấn nào có thể thực hiện công việc này trong Hive không?

Trả lời

10

Không có điều gì như biểu thức chính quy cho truy vấn thả trong tổ (hoặc tôi không tìm thấy chúng). Nhưng có những cách multipe để làm điều đó, ví dụ:

  • Với một kịch bản shell:

    hive -e "show tables 'temp_*'" | xargs -I '{}' hive -e 'drop table {}' 
    
  • Hoặc bằng cách đặt bảng của bạn trong một cơ sở dữ liệu cụ thể và thả toàn bộ cơ sở dữ liệu.

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

hive -e ‘hiển thị bảng 'temp_ *’ | xargs -I ‘{}’ hive -e 'drop table {} ’không hoạt động đối với tôi – MysticForce

+2

Câu trả lời là hoàn hảo tuy nhiên có một thay đổi nhỏ cần thiết thực sự hiệu quả với tôi. Tôi đang sửa đổi mã của @Louxou một chút bằng cách thêm dấu ngoặc kép. Đây là mã được cập nhật. 'hive -e" hiển thị bảng 'temp_ *' "| xargs -I '{}' hive -e 'drop table {}' ' –

0

Hãy thử điều này:

hive -e 'sử dụng sample_db; bảng show' | xargs -I '{}' hive -e 'sử dụng sample_db; thả table {}'

2

Giải pháp của tôi đã được sử dụng kịch bản bash với cmd sau:

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

Dưới lệnh cũng sẽ làm việc.

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

Như tôi đã có rất nhiều bảng làm thả tôi đã sử dụng lệnh sau, lấy cảm hứng từ trong câu trả lời @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

giải pháp Trên đây là tốt. Nhưng nếu bạn có nhiều bảng để xóa, thì chạy 'hive -e drop table' là chậm. Vì vậy, tôi đã sử dụng điều này:

hive -e 'use db; hiển thị bảng' | mẫu grep> file.hql

sử dụng editor vim để mở file.hql và chạy dưới lệnh

:!% s^thả bảng
:% s $ !;

sau đó chạy

hive -f file.hql

Cách tiếp cận này sẽ nhanh hơn nhiều.

+0

Bạn đề cập đến mẫu bảng đối sánh ở đây ở đâu? –

+1

@Alex Raj Kaliamoorthy - grep 'mẫu' – Chandra

0

giải pháp nhanh nhất thông qua một kịch bản shell:

drop_tables.sh pattern

Shell script nội dung:

hive -e 'use db;show tables' | grep $1 | sed 's/^/drop table db./' | sed 's/$/;/' > temp.hql 
hive -f temp.hql 
rm temp.hql 
Các vấn đề liên quan