mysql jdbc 表结构_mysql表结构转clickhouse 表结构

public static String changeMysqlTableToClickHouse(String tableName){

String tables = DaoUtil.excuteWithReturn("show create table "+tableName);

String[] rows = tables.split("\n");

String replaceTables = "";

int i = 0 ;

for(String row :rows){

if(row.contains("KEY")){

continue;

}

if(row.contains(") ENGINE=InnoDB")){

row = ") ENGINE = MergeTree" ;

}

String changeRow = row.replaceAll(" NOT NULL","").

replaceAll(" NULL","")

.replaceAll("AUTO_INCREMENT","")

.replaceAll("CHARACTER SET utf8mb4","")

.replaceAll("CHARACTER SET utf8","")

.replaceAll("ON UPDATE CURRENT_TIMESTAMP","")

.replaceAll("CURRENT_TIMESTAMP","")

.replaceFirst( " datetime "," DateTime ")

.replaceFirst( " datetime "," DateTime ");

changeRow = changeRow.replaceAll("varchar\\(\\d+\\)","String");

String[] changeColumns = changeRow.split("[ ]");

// System.out.println(changeRow);

if(changeColumns[3].contains("int")||changeColumns[3].contains("bigint")){

int length = Integer.parseInt(changeColumns[3]

.replaceAll("bigint","")

.replaceAll("int","")

.replaceAll("\\(","")

.replaceAll("\\)",""));

String type = changeColumns[3].contains("bigint")?"bigint":"int";

if(length<3){

changeRow = changeRow

.replaceFirst(type+"\\("+length+"\\)","Int8");

}else if(length<5){

changeRow = changeRow

.replaceFirst(type+"\\("+length+"\\)","Int16");

}

else if(length<=9){

changeRow = changeRow

.replaceFirst(type+"\\("+length+"\\)","Int32");

}else{

changeRow = changeRow

.replaceFirst(type+"\\("+length+"\\)","Int64");

}

}

replaceTables += changeRow ;

i++;

}

if(replaceTables.contains(",) ENGINE = MergeTree")){

String temp = replaceTables.substring(0,replaceTables.indexOf(",) ENGINE = MergeTree"));

replaceTables = temp +") ENGINE = MergeTree ";

}

replaceTables.replaceAll("CREATE TABLE `"+tableName+"`",tableName+"_local");

System.out.println(replaceTables);

System.out.println("CREATE TABLE "+tableName+"_all AS "+tableName

+"_local ENGINE = Distributed(ck_cluster,tclydcdb,"+tableName+"_local, rand())");

return replaceTables ;

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值