Clickhouse 批量删除表分区脚本

#输入的分区只会删除分区之前的数据 当天的分区数据不会被删除 partition<分区
#支持执行脚本时遇到执行失败的sql 会终止脚本执行 exit 遇到报错会停止执行 no_exit 遇到报错还会继续执行下去
#支持单个表批量分区删除

查询表大小

select hostname(), database, table,formatReadableSize(sum(bytes_on_disk)) as on_disk,sum(bytes_on_disk),sum(rows) from system.parts_all where database!='system' group by database,table  order by sum(bytes_on_disk)  desc SETTINGS distributed_group_by_no_merge = 1;

查询表分区

select partition from system.parts_all where database='xxx' and  table='xxx' group by partition order by partition desc;

执行删除分区脚本

sh drop_partition.sh 127.0.0.1  exit user passwrod database table partition;


#!/bin/bash
#输入的分区只会删除分区之前的数据 当天的分区数据不会被删除 partition<分区
#支持执行脚本时遇到执行失败的sql 会终止脚本执行 exit 遇到报错会停止执行 no_exit 遇到报错还会继续执行下去
#支持自定义库和自定义表分区删除

#当前目录
dir=$(dirname $(readlink -f $0))
#登录ck_client_ip
host_ip=$1
#ck 账号
#退出标识
exit_code=$2
user=$3
#ck 密码
pass=$4
#库名
database=$5
#表名
table=$6
#partition
partition=$7
#ck 端口
http_port="29010"







#判断一下传入参数
if [[ $# -ne 7 ]];then
  echo "$0 host  exit_code user passwrod database table partition"
  echo "$0 127.0.0.1  exit user passwrod database table partition"
  exit 1
fi


if [[ "$exit_code" -ne "exit" ]] && [[ "$exit_code" -ne "no_exit" ]]; then
    echo "exit_code: $exit_code"
    echo "Please input first parameter exit or no_exit"
    exit 1
fi


function exit_method(){
   if [[ $exit_code == "exit" ]]; then  
      exit 1
   fi
}
 
function drop_partition(){

  select_partition="select concat('alter table ${database}.${table}  on cluster xhraptor drop partition ', partition ,';') from system.parts where  partition<'${partition}' and database='${database}' and table='${table}' group by partition order by partition"

  ${dir}/clickhouse-client -h ${host_ip} --port ${http_port} -u ${user} --password ${pass} -q "${select_partition}" > /tmp/1.txt
  
  
  IFS=$'\n'
  for line in `cat /tmp/1.txt`
  do
    echo "执行 $line"
        ${dir}/clickhouse-client -h ${host_ip} --port ${http_port} -u ${user} --password ${pass} -q "${line}"
        if [[ $? -ne 0 ]];
        then
     echo "失败----------------"
         exit_method
     
    else
     echo "成功----------------"
         sleep 2s
         
  
  fi

  done

  

}

drop_partition


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值