在Hive中删除具有相同前缀的多个表

时间:2016-03-09 10:28:53

标签: hadoop hive hiveql

我在配置单元中有几个表格具有相同的前缀,如下所示。

temp_table_name
temp_table_add
temp_table_area

我的数据库中有数百个这样的表以及许多其他表。 我想删除以“temp_table”开头的表。 你们中的任何人都知道任何可以在Hive中执行此操作的查询吗?

8 个答案:

答案 0 :(得分:16)

在hive中没有用于drop查询的正则表达式(或者我没有找到它们)。但有多种方法可以做到这一点,例如:

  • 使用shell脚本:

    hive -e "show tables 'temp_*'" | xargs -I '{}' hive -e 'drop table {}'
    
  • 或者将您的表放在特定的数据库中并删除整个数据库。

    Create table temp.table_name;
    
    Drop database temp cascade;
    

答案 1 :(得分:5)

以上解决方案都很好。但是如果你有更多的表要删除,那么运行' hive -e drop table'是慢的。所以,我用过这个:

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

使用vim编辑器打开file.hql并运行以下命令

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

然后运行

hive -f file.hql

这种方法会快得多。

答案 2 :(得分:3)

我的解决方案是使用带有以下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

答案 3 :(得分:3)

我能够使用Scala的Apache Spark中的以下步骤删除所有表:

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}"))

答案 4 :(得分:2)

由于我有很多表格,所以我使用了以下命令,受到@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

答案 5 :(得分:0)

试试这个:

hive -e'使用sample_db;显示表格' | xargs -I' {}' hive -e'使用sample_db; drop table {}'

答案 6 :(得分:0)

下面的命令也可以。

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

答案 7 :(得分:0)

通过一个shell脚本获得最快的解决方案:

drop_tables.sh pattern

Shell脚本内容:

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