大批量清理hive的分割槽資料時獲取想要資料

2021-12-30 11:41:07 字數 2353 閱讀 6943

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...