package com.alibaba.datax.plugin.rdbms.util; import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; public final class TableExpandUtil { // schema.table[0-2]more // 1 2 3 4 5 public static Pattern pattern = Pattern .compile("(\\w+\\.)?(\\w+)\\[(\\d+)-(\\d+)\\](.*)"); private TableExpandUtil() { } /** * Split the table string(Usually contains names of some tables) to a List * that is formated. example: table[0-32] will be splitted into `table0`, * `table1`, `table2`, ... ,`table32` in {@link List} * * @param tables * a string contains table name(one or many). * @return a split result of table name. * <p/> * TODO 删除参数 DataBaseType */ public static List<String> splitTables(DataBaseType dataBaseType, String tables) { List<String> splittedTables = new ArrayList<String>(); String[] tableArrays = tables.split(","); String tableName = null; for (String tableArray : tableArrays) { Matcher matcher = pattern.matcher(tableArray.trim()); if (!matcher.matches()) { tableName = tableArray.trim(); splittedTables.add(tableName); } else { String start = matcher.group(3).trim(); String end = matcher.group(4).trim(); String tmp = ""; if (Integer.valueOf(start) > Integer.valueOf(end)) { tmp = start; start = end; end = tmp; } int len = start.length(); String schema = null; for (int k = Integer.valueOf(start); k <= Integer.valueOf(end); k++) { schema = (null == matcher.group(1)) ? "" : matcher.group(1) .trim(); if (start.startsWith("0")) { tableName = schema + matcher.group(2).trim() + String.format("%0" + len + "d", k) + matcher.group(5).trim(); splittedTables.add(tableName); } else { tableName = schema + matcher.group(2).trim() + String.format("%d", k) + matcher.group(5).trim(); splittedTables.add(tableName); } } } } return splittedTables; } public static List<String> expandTableConf(DataBaseType dataBaseType, List<String> tables) { List<String> parsedTables = new ArrayList<String>(); for (String table : tables) { List<String> splittedTables = splitTables(dataBaseType, table); parsedTables.addAll(splittedTables); } return parsedTables; } }