Удаление нескольких таблиц с одинаковым префиксом в Hive

У меня есть несколько таблиц в hive, которые имеют тот же префикс, что и ниже..

temp_table_name
temp_table_add
temp_table_area

в моей базе данных есть несколько сотен таких таблиц вместе со многими другими таблицами. Я хочу удалить таблицы, которые начинаются с "temp_table". Кто-нибудь из вас знает запрос, который может выполнить эту работу в Hive?

8 ответов


нет такой вещи, как регулярные выражения для drop query в hive (или я их не нашел). Но есть несколько способов сделать это, например:

  • С shell-скрипт :

    hive -e "show tables 'temp_*'" | xargs -I '{}' hive -e 'drop table {}'
    
  • или путем размещения таблиц в определенной базе данных и удаление всей базы данных.

    Create table temp.table_name;
    
    Drop database temp cascade;
    

вышеуказанные решения хороши. Но если у вас есть больше таблиц для удаления, то запуск "hive-e drop table" медленный. Итак, я использовал это:

hive-e 'use db;show tables' / grep pattern > file.бумага HQL

используйте редактор vim для открытия файла.hql и выполнить ниже команды

:%s!^!отбросьте таблицу
: %s!$!;

затем запустите

файл hive-F.бумага HQL

этот подход будет значительно быстрее.


моим решением было использовать скрипт bash со следующим cmd:

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

поскольку у меня было много таблиц, я использовал следующую команду, вдохновленную ответом @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

я смог удалить все таблицы, используя следующие шаги

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

попробуйте это:

куст -е sample_db;показать таблицы | команды xargs -я '{}' улей -е 'использовать sample_db;падение таблицы {}'

ниже команда также будет работать.

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

самое быстрое решение через один сценарий оболочки:

drop_tables.sh pattern

скрипт содержанием:

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