今天的一個業務場景就是要把三年的數據從第一天不停的融合起來,每一天作為表格一個新的分區。由於空間有限,數據量很大,可能每天數據都是幾十個G的大小。所以我需要做的一點就是在融合這一天之后,刪除一天的分區數據,為了保險起見,我刪除這一天的前三天的數據。
大致代碼是這樣的
function shan(){
cat <<EOF
ALTER TABLE table_name DROP PARTITION (dt='$san');
EOF
}
first=20160706
second=20190310
while [ "$first" -le "$second" ]
do
zhong=`date -d "1 days ago ${first}" +%Y%m%d`
hive -e "`merge`" #這行代碼就是在生成當天的數據融合
san=`date -d "3 days ago ${first}" +%Y%m%d`
hive -e "`shan`" #刪除三天前的數據
let first=`date -d "-1 days ago ${first}" +%Y%m%d`
done
當然核心代碼就是刪除分區的那個代碼
ALTER TABLE table_name DROP PARTITION (dt='$san');
