Удаление нескольких таблиц с одинаковым префиксом в 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