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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。