hive 批量添加,刪除分區


一.批量添加分區:
 
use bigdata;
alter table siebel_member
add if not exists
partition(dt='20180401') location '20180401'
partition(dt='20180402') location '20180402'
partition(dt='20180403') location '20180403'
partition(dt='20180404') location '20180404';
 
二.批量刪除分區
 
alter table siebel_member drop if exists
partition(dt='20180401'),
partition(dt='20180402'),
partition(dt='20180403'),
partition(dt='20180404');
 
三.大量分區的添加
雖說是批量添加分區,但是一下子添加2000個分區,如果把2000個分區寫在一個語句里面,hive是不允許的。
所以只好一個月一個月的加,嘗試了使用shell 生成 line="hive -e "xxxxx""  ${line} ,但是解析錯誤,采用python + shell 解決了問題。
python 代碼如下:
 
#!/usr/bin/env python
#encoding=utf8
 
import datetime
import os
import sys
 
 
def dateRange(beginDate, endDate):
    dates = []
    dt = datetime.datetime.strptime(beginDate, "%Y%m%d")
    date = beginDate[:]
    while date < endDate:
        dates.append(date)
        dt = dt + datetime.timedelta(1)
        date = dt.strftime("%Y%m%d")
    return dates
 
 
def genSql(datelist, table):
    sql = """
hive -e "
use bigdata;
alter table """ + table + """
add if not exists """
    for i in datelist:
        sql = sql + """partition(dt='""" + i + """') location '""" + i + """' """
    sql = sql.strip() + """;" """
    os.system(sql)
 
 
if __name__ == '__main__':
    if sys.argv.__len__() != 4:
        print("參數錯誤")
        sys.exit()
    st = sys.argv[1]
    et = sys.argv[2]
    table = sys.argv[3]
    datelist = dateRange(st,et)
    genSql(datelist,table)
 
 
shell 用來調度 py
#添加分區,按月添加分區 會添加到et所在月的最后一天
function add_par(){
st=$1
et=$2
tbname=$3
while [ ${et} -ge ${st} ]
do
pet=$(date --date="+1 month ${et}" +"%Y%m%d")
python a.py ${et} ${pet} ${tbname}
et=$(date --date="1 month ago ${et}" +"%Y%m%d")
done
}
 
 
 
 
 
 
 
 
 
 
 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM