Смотрите, если путь к таблицам кустов /path/your_hive_table_path/
, как показано ниже:
hadoop --cluster your-hadoop-cluster fs -ls /path/your_hive_table_path/
drwxrwxrwx+ - h_mifi supergroup 0 2019-01-24 10:33 /path/your_hive_table_path//mifidw_car_insurance_expire_month_data
drwxrwxrwx+ - h_mifi supergroup 0 2019-01-24 10:39 /path/your_hive_table_path//mifidw_car_owner
drwxr-xr-x+ - h_mifi supergroup 0 2019-05-30 03:01 /path/your_hive_table_path//push_credit_card_mine_result_new
drwxr-xr-x+ - h_mifi supergroup 0 2019-05-30 03:41 /path/your_hive_table_path//push_live_payment_bill_mine_result_new
Мы можем получить последнюю дату обновления файла таблицы, как показано ниже:
hadoop --cluster your-hadoop-cluster fs -ls /path/your_hive_table_path/ | awk -F'[ ]+' '{print $6}'
2019-01-24
2019-01-24
2019-05-30
2019-05-30
Нам нужно loop
, чтобы проверить каждую таблицу на наличие более 90 дней и выполнить операции remove
и drop
. Полный сценарий оболочки ниже, я проверял, он работал хорошо, надеюсь, он поможет вам.
hadoop --cluster your-hadoop-cluster fs -ls /path/your_hive_table_path/ | grep '/path/your_hive_table_path/' | while read line
do
#Get the update date of hive table
date_str=`echo $line | awk -F'[ ]+' '{print $6}'`
#get the path of hive table
table_path=`echo $line | awk -F'[ ]+' '{print $8}'`
#Get the table name of hive table
table_name=`echo $table_path | awk -F'/' '{print $7}' `
today_date_stamp=`date +%s`
table_date_stamp=`date -d $date_str +%s`
stamp_diff=`expr $today_date_stamp - $table_date_stamp`
#Get the diff days from now
days_diff=`expr $stamp_diff / 86400`
#if diff days is greater than 90, rm and drop.
if [ $days_diff -gt 90 ];then
#remove the hdfs file
hadoop --cluster your-hadoop-cluster fs -rm $table_path
#drop the hive table
hive -e"drop table $table_name"
fi
done