2016-11-06 2 views
0

У меня есть таблица в улей построена с помощью следующей команды:капают улей раздел на основе определенного условия во время выполнения

create table t1 (x int, y int, s string) partitioned by (wk int) stored as sequencefile;

В таблице есть данные ниже:

select * from t1; 
+-------+-------+-------+--------+--+ 
| t1.x | t1.y | t1.s | t1.wk | 
+-------+-------+-------+--------+--+ 
| 1  | 2  | abc | 10  | 
| 4  | 5  | xyz | 11  | 
| 7  | 8  | pqr | 12  | 
+-------+-------+-------+--------+--+ 

Теперь спросите заключается в том, чтобы удалить самый старый раздел, когда число разделов равно >=2 Можно ли это обрабатывать в hql или через любой сценарий оболочки и как?

Учитывая я буду использовать имя_бд в качестве переменной, как hive -e 'use "$dbname"; show partitions t1

ответ

0

Если разделы упорядочены по дате, вы можете написать скрипт, в котором вы могли бы использовать hive -e 'SHOW PARTITIONS t1' получить все разделы, в вашем примере, он будет возвращать :

wk=10 
wk=11 
wk=12 

Тогда вы можете оформить hive -e 'ALTER TABLE t1 DROP PARTITION (wk=10)' удалить первый раздел;

Так что-то вроде:

db=mydb 
if ((`hive -e "use $db; SHOW PARTITIONS t1" | grep wk | wc -l` < 2)) ; then 
    exit; 
fi 
partition=`hive -e "use $db; SHOW PARTITIONS t1" | grep wk | head -1`; 
hive -e "use $db; ALTER TABLE t1 DROP PARTITION ($partition)"; 
+0

да будет упорядочен по week_key. Но как показывают разделы раздела? Можете ли вы предоставить примеры команд –

+0

@KoushikChandra Я добавил код, который я не запускал. Если это полезно, не стесняйтесь предлагать редактирование этого ответа, если для его работы требуются некоторые изменения ... –

+0

Если я хочу использовать имя базы данных в переменной, то та же команда не работает, как улей -e 'show разделы $ dbname.t1 '> /home/$USER/t1.txt –