in odps-console-public/src/main/java/com/aliyun/openservices/odps/console/pub/ReadTableCommand.java [217:289]
public static ReadTableCommand parse(String commandString, ExecutionContext sessionContext)
throws ODPSConsoleException {
String readCommandString = commandString;
if (readCommandString.toUpperCase().matches("\\s*READ\\s+\\w[\\s\\S]*")) {
// 会把所有多个空格都替换掉
readCommandString = readCommandString.replaceAll("\\s+", " ");
// remove "read "
readCommandString = readCommandString.substring("read ".length()).trim();
String tableName = "";
int index = readCommandString.indexOf("(");
if (index > 0) {
tableName = readCommandString.substring(0, index);
if (tableName.toUpperCase().indexOf(" PARTITION") > 0) {
// tableName中也会包含PARTITION字符,
tableName = tableName.substring(0, tableName.toUpperCase().indexOf(" PARTITION"));
}
} else {
// 没有column和PARTITION,用" "空格来区分
if (readCommandString.indexOf(" ") > 0) {
tableName = readCommandString.substring(0, readCommandString.indexOf(" "));
} else {
// read mytable的情况
tableName = readCommandString;
}
}
// remove tablename, 把前面的空格也删除掉
readCommandString = readCommandString.substring(tableName.length()).trim();
String columns = "";
if (readCommandString.startsWith("(") && readCommandString.indexOf(")") > 0) {
// 取columns
columns = readCommandString.substring(0, readCommandString.indexOf(")") + 1);
}
// remove columns, 把前面的空格也删除掉
readCommandString = readCommandString.substring(columns.length()).trim();
String partitions = "";
if (readCommandString.toUpperCase().indexOf("PARTITION") == 0
&& readCommandString.indexOf("(") > 0 && readCommandString.indexOf(")") > 0
&& readCommandString.indexOf("(") < readCommandString.indexOf(")")) {
partitions = readCommandString.substring(readCommandString.indexOf("("),
readCommandString.indexOf(")") + 1);
readCommandString = readCommandString.substring(readCommandString.indexOf(")") + 1).trim();
}
// 默认 10W > 服务器端返回10000行
int lineNum = 100000;
if (!"".equals(readCommandString)) {
try {
lineNum = Integer.parseInt(readCommandString);
} catch (NumberFormatException e) {
// 最后只剩下lineNum,如果转成 linenum出错,则命令出错
throw new ODPSConsoleException(ODPSConsoleConstants.BAD_COMMAND);
}
}
tableName = tableName.trim();
Coordinate coordinate = Coordinate.getCoordinateABC(tableName);
coordinate.setPartitionSpec(populatePartitions(partitions));
List<String> columnList = validateAndGetColumnList(columns);
return new ReadTableCommand(coordinate, columnList, lineNum, commandString, sessionContext);
}
return null;
}