2016-03-09 12 views
7
で同じプレフィックス

で複数のテーブルをドロップします。 "temp_table"で始まるテーブルを削除したいとします。 Hiveでこの作業を行うことができるクエリを知っていますか?は、このようなテーブルの数百には多くの他のテーブルと一緒に私のデータベース内にあります</p> <pre><code>temp_table_name temp_table_add temp_table_area </code></pre> <p>..私は以下のように同じプレフィックスを持つハイブのいくつかのテーブルを持っているハイブ

答えて

10

ハイブのドロップクエリの正規表現などはありません(または見つからなかった)。シェルスクリプトで

  • :しかし、例えば、それを行うにはmultipeの方法があります

    hive -e "show tables 'temp_*'" | xargs -I '{}' hive -e 'drop table {}' 
    
  • または特定のデータベース内のテーブルを置いて、データベース全体をドロップすることによって

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

ハイブ-e「ショーテーブル「temp_ *」| xargs -I '{}' hive -e 'drop table {}'は私のために働いていません – MysticForce

+2

答えは完璧ですが、実際に私のために必要な小さな変更があります。私は二重引用符を追加することで@Louxouのコードを少し変更しています。ここに更新されたコードがあります。 'hive -e"はテーブル 'temp_ *' "を表示します。 xargs -I '{}' hive -e 'drop table {}' ' –

0

これを試してみてください:

ハイブ-e '使用sample_dbを、番組表を' | xargsの-I '{}' ハイブ-e '使用sample_db; {}テーブルをドロップ'

2

私のソリューションは、次のCMDでbashスクリプトを使用することであった:コマンド以下

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

も動作します。 @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 
2

私はテーブルの多くは、私は、次のコマンドを使用落とすんでしたように、良いです。しかし、削除するテーブルがさらにある場合は、 'hive -e drop table'を実行するのが遅くなります。だから私はこれを使った:

ハイブ-e 'use db; show tables' | grepのパターン> file.hql

使用のvimエディタはfile.hql開き、

コマンド以下を実行します!%sの^テーブル
ドロップ:!%sに$ !;

は、このアプローチは、はるかに高速になります

file.hql -f

ハイブを実行します。1つのシェルスクリプトを使用して

3

に触発

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

マッチテーブルのパターンはどこにありますか? –

+1

@Alex Raj Kaliamoorthy - grep 'pattern' – Chandra

0

最速のソリューション:

drop_tables.sh pattern

シェルスクリプトの内容:

hive -e 'use db;show tables' | grep $1 | sed 's/^/drop table db./' | sed 's/$/;/' > temp.hql 
hive -f temp.hql 
rm temp.hql 
関連する問題

 関連する問題