public static String changeMysqlTableToClickHouse(String createTable) {
String tables = createTable;
String[] rows = tables.split("\n");
String replaceTables = "";
int i = 0;
String partition = "";
String orderBy = "";
for (String row : rows) {
if (row.contains("KEY")) {
continue;
}
if (row.contains("AUTO_INCREMENT,")) {
continue;
}
if (row.contains(") ENGINE=InnoDB")) {
row = ") ENGINE = MergeTree";
}
String changeRow = row.replaceAll("NOT NULL", "")
.replaceAll("AUTO_INCREMENT", "")
.replaceAll("CHARACTER SET utf8mb4", "")
.replaceAll("CHARACTER SET utf8", "")
.replaceAll("ON UPDATE CURRENT_TIMESTAMP", "")
.replaceAll("CURRENT_TIMESTAMP", "")
.replaceAll(" COLLATE utf8mb4_bin", "")
.replaceAll(" COLLATE utf8_bin", "")
.replaceAll(" COLLATE utf8", "")
.replaceAll("datetime DEFAULT NULL", " DateTime ")
.replaceAll("unsigned zerofill", "")
.replaceAll("unsigned", "")
.replaceAll("datetime\\(\\d+\\)", "DateTime")
.replaceAll(" datetime ", " DateTime ");
changeRow = changeRow.replaceAll("varchar\\(\\d+\\) DEFAULT NULL", "Nullable(String)");
changeRow = changeRow.replaceAll("varchar\\(\\d+\\)", "String");
changeRow = changeRow.replaceAll("text", "String");
changeRow = changeRow.replaceAll("DEFAULT NULL", "");
changeRow = changeRow.replaceAll("DEFAULT ''", "");
changeRow = changeRow.replaceAll("DEFAULT \\d+", "");
changeRow = changeRow.replaceAll("DEFAULT '\\d+'", "");
String[] changeColumns = changeRow.split("[ ]");
if ((changeColumns[3].contains("double") || (changeColumns[3].contains("decimal")))) {
changeRow = changeRow.replace(changeColumns[3], "Float64");
} else if (changeColumns[3].contains("float")) {
changeRow = changeRow.replace(changeColumns[3], "Float32");
}
if (changeColumns[2].equals("`stat_date`") || changeColumns[2].equals("stat_date") || changeColumns[2].equals("`start_date`") || changeColumns[2].equals("start_date") || changeColumns[2].equals("date") || changeColumns[2].equals("dt") || changeColumns[2].equals("data_date") || changeColumns[2].equals("`date`") || changeColumns[2].equals("`dt`") || changeColumns[2].equals("`data_date`")) {
partition = changeColumns[2];
changeRow = changeRow.replace("Nullable(String)", "String");
}
if (changeColumns[2].equals("city_name") || changeColumns[2].equals("`city_name`")) {
orderBy = changeColumns[2];
changeRow = changeRow.replace("Nullable(String)", "String");
}
// System.out.println(changeRow);
if ((changeColumns[3].contains("int") || changeColumns[3].contains("bigint"))) {
int length = Integer.parseInt(StringUtils.isEmpty(changeColumns[3]
.replaceAll("bigint", "")
.replaceAll("tinyint", "")
.replaceAll("int", "")
.replaceAll("\\(", "")
.replaceAll("\\)", "")) ? "10" : changeColumns[3]
.replaceAll("bigint", "")
.replaceAll("tinyint", "")
.replaceAll("smallint", "")
.replaceAll("int", "")
.replaceAll("\\(", "")
.replaceAll("\\)", ""));
String type = changeColumns[3].contains("bigint") ? "bigint" : changeColumns[3].contains("tinyint") ? "tinyint" : changeColumns[3].contains("smallint") ? "smallint" : "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 if (changeColumns[3].equals("int")) {
changeRow = changeRow
.replaceFirst(changeColumns[3], "Int32");
} else if (changeColumns[3].equals("bigint")) {
changeRow = changeRow
.replaceFirst(changeColumns[3], "Int64");
} else if (changeColumns[3].equals("tinyint")) {
changeRow = changeRow
.replaceFirst(changeColumns[3], "Int8");
} else if (changeColumns[3].equals("smallint")) {
changeRow = changeRow
.replaceFirst(changeColumns[3], "Int16");
} else {
changeRow = changeRow
.replaceFirst(type + "\\(" + length + "\\)", "Int64");
}
}
replaceTables += changeRow + "\n";
i++;
}
if (replaceTables.contains(",\n) ENGINE = MergeTree")) {
String temp = replaceTables.substring(0, replaceTables.indexOf(",\n) ENGINE = MergeTree"));
replaceTables = temp + ") ENGINE = MergeTree ";
String suffix1 = partition != "" ? "PARTITION BY " + partition : partition;
String suffix2 = orderBy != "" ? " ORDER BY " + orderBy : orderBy;
String suffix3 = " SETTINGS storage_policy = 'policy_name_1'";
replaceTables = replaceTables + suffix1 + suffix2 + suffix3;
}
// replaceTables.replaceAll("CREATE TABLE `" + tableName + "`", tableName + "_local");
return replaceTables + ";\n";
}
mysql表结构转clickhouse
于 2021-06-03 11:53:30 首次发布
1019

被折叠的 条评论
为什么被折叠?



