1.檔案:table_config_order 內容如下
test.tb_test_basic work_date 1,2 3 2018-04-25
--- scheam.table 時間分割槽字段 每天都跑的處理方式 保留最近3天 資料時間分割槽存在起始時間
2.檔案:delete_partitions.sh 內容如下
#!/bin/bash
#每天跑一次,和月末跑一次的程式可用crontab 定時計畫執行
#檢查分割槽是否存在
function check_partition()##table dt 開始時間 結束時間
function date0()
sql=''
while [[ "$" > "$" || "$" = "$" ]]
dosql=$"alter table $1 drop if exists partition($2 = '$date');"
date=`date -d "$date -1 days" +"%y-%m-%d"`
done
echo "hive -e '$' "
# hive -e "$"
fi}#保留月末
function date_month()
last day" +%y%m%d` #本月月末
v_tm_l=`date +%y%m%d`
v_curr=`date +%y%m%d`
if [ "$" = "$" ];then
begin_date=$v_tm_f
end_date=$v_curr
date=$
sql=''
while [[ "$" > "$" ]]
dodate=`date -d "$date -1 days" +"%y%m%d"`
sql=$"alter table $1 drop if exists partition($2 = '$date');"
done
echo "hive -e '$' "
# hive -e "$"
else
echo " not do anythings"
fi}#保留最近幾天,第一次跑 開始跑一次
function date1()
sql=''
while [[ "$" > "$" || "$" = "$" ]]
dosql=$"alter table $1 drop if exists partition($2 = '$date');"
date=`date -d "$date -1 days" +"%y-%m-%d"`
done
echo "hive -e '$' "
# hive -e "$"
}#保留最近幾天,第二次跑 每天都跑
function date2()
"alter table $1 drop if exists partition($2 = '$date');"
echo "hive -e '$' "
# hive -e "$"
}function spilt()
doecho start------ date$s
date$s $var1 $var2 $var4 $var5
done
}dir_base=`pwd`
filename=$dir_base/table_config_order
cat $filename | grep -v "^#" |grep -v "^$" |while read line
do#從awk中傳值到shell,利用中間目錄取出每行的值,否則得到的是最後一行的數值
echo $line >$dir_base/tmp
eval $(awk '' $dir_base/tmp)
spilt $var3
echo"-----------------------每月跑測試------------------"
date_month $var1 $var2
echo"-----------------------清除指定時間段分割槽------------------"
date0 table dt 2018-05-01 2018-05-10
#總結#1.每天跑的第一天先執行date1一次,以後每天都是跑date2 ;
#2.按照月末跑的,只需要月末的時候crontab 呼叫一下date_month
#3.date0 可動態刪除指定時間段的分割槽
done
將1,2兩個檔案放在同一級的目錄下可,可直接測試執行
滿足需求①保留最近n天的資料,每天都跑一次
②每到月末刪除本月的分割槽資料,只保留月末一天
③刪除指定時間段的分割槽
清理大批量資料例子
最近有乙個新任務,在乙個表裡一下更新700w條資料。由於這個表業務正在使用,而且sql server做了完整日誌記錄。修改了一下更新sql,分批更新,每次60w。declare num intset num 0 while num 7000000 begin update t set usecust...
mysql大批量更新資料
大批量的更新資料如果再使用傳統的 update 方法一條一條的更新,效率是很慢的,而且效能差,也很容易造成阻塞。1 使用mysql 自有的語句構建批量更新 update tble set price case id when 16 then 7.6 when 19 then 8.86 when 20...
solr大批量資料匯出
需求 有100個core,每個core4000w資料量。把所有資料匯出來。方案1.直接對每個core通過httpsolrclient先取出總條數,然後通過每次分頁讀n行,直到讀完,這個方案肯定不行,因為越到後面,讀取速度越慢,不用想都要很長時間。方案2.深度分頁 通過游標,可以使分頁速度很快。sol...