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 ;
}