in odps-console-tunnel/src/main/java/com/aliyun/openservices/odps/console/tunnel/TunnelCommand.java [77:159]
public static DShipCommand parse(String commandString, ExecutionContext sessionContext)
throws ODPSConsoleException {
String readCommandString = commandString;
if (readCommandString.toUpperCase().matches("\\s*UPLOAD\\s+\\w[\\s\\S]*")
|| readCommandString.toUpperCase().matches("\\s*DOWNLOAD\\s+\\w[\\s\\S]*")) {
// 会把所有多个空格都替换掉
readCommandString = readCommandString.replaceAll("\\s+", " ");
boolean isUp = true;
if (readCommandString.toUpperCase().matches("\\s*DOWNLOAD\\s+\\w[\\s\\S]*")) {
readCommandString = readCommandString.substring("DOWNLOAD ".length()).trim();
isUp = false;
} else {
readCommandString = readCommandString.substring("UPLOAD ".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 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);
// remove partitions
readCommandString = readCommandString.substring(readCommandString.indexOf(")") + 1).trim();
}
String filename = "";
if (isUp && readCommandString.toUpperCase().startsWith("FROM ")) {
filename = readCommandString.substring(readCommandString.indexOf(" "));
} else if (!isUp && readCommandString.toUpperCase().startsWith("TO ")) {
filename = readCommandString.substring(readCommandString.indexOf(" "));
} else {
throw new ODPSConsoleException("bad command. '" + readCommandString + "'");
}
filename = filename.trim();
readCommandString = readCommandString.substring(readCommandString.indexOf(filename)
+ filename.length());
if (!"".equals(readCommandString)) {
// TODO help
throw new ODPSConsoleException("bad command. '" + readCommandString + "'");
}
// 转成partition_spec
partitions = partitions.replace("(", "").replace(")", "")
.trim();
// Replace tunnel command with dship command to get rid of the old tunnel-sdk
String dshipCommandText = transformIntoDshipCommand(tableName, partitions, filename, isUp);
DefaultOutputWriter writer = sessionContext.getOutputWriter();
writer.writeDebug("Replacing command: " + commandString);
writer.writeDebug("with " + dshipCommandText);
return new DShipCommand(dshipCommandText, sessionContext);
}
return null;
}