in odps-console-public/src/main/java/com/aliyun/openservices/odps/console/pub/ReadTableCommand.java [98:175]
public void run() throws OdpsException, ODPSConsoleException {
coordinate.interpretByCtx(getContext());
String projectName = coordinate.getProjectName();
String schemaName = coordinate.getSchemaName();
String tableName = coordinate.getObjectName();
String partitionSpec = coordinate.getPartitionSpec();
Odps odps = getCurrentOdps();
// get cvs data
if (getContext().isMachineReadable()) {
String cvsStr;
try {
cvsStr = readCvsData(projectName, schemaName, tableName, partitionSpec, columns, lineNum);
getWriter().writeResult(cvsStr);
return;
} catch (IOException e) {
throw new OdpsException(e.getMessage(), e);
}
}
Table table = odps.tables().get(projectName, schemaName, tableName);
PartitionSpec spec = null;
if (partitionSpec != null && partitionSpec.trim().length() > 0) {
spec = new PartitionSpec(partitionSpec);
}
ArrowStreamRecordReader reader =
(ArrowStreamRecordReader) table.read(spec, columns, lineNum, getContext().getSqlTimezone(),
useLegacyType, getContext().getTunnelEndpoint());
Map<String, TypeInfo>
columnNameTypeMap =
Arrays.stream(reader.getSchema()).collect(Collectors.toMap(Column::getName, Column::getTypeInfo));
// get header
Map<String, Integer> displayWidth = ODPSConsoleUtils.getDisplayWidth(
table.getSchema().getColumns(),
table.getSchema().getPartitionColumns(),
columns);
Record record;
try {
if (columns == null) {
columns = Arrays.stream(reader.getSchema()).map(Column::getName).collect(Collectors.toList());
}
String frame = ODPSConsoleUtils.makeOutputFrame(displayWidth).trim();
String title =
ODPSConsoleUtils.makeTitleByString(columns, displayWidth).trim();
getWriter().writeResult(frame);
getWriter().writeResult(title);
getWriter().writeResult(frame);
while ((record = reader.read()) != null) {
StringBuilder resultBuf = new StringBuilder();
resultBuf.append("| ");
Iterator<Integer> it = displayWidth.values().iterator();
for (String column : columns) {
String str =
Optional.ofNullable(record.get(column))
.map(o -> formatter.formatObject(o, columnNameTypeMap.get(column)))
.orElse("NULL");
resultBuf.append(str);
int length = it.next();
if (str.length() < length) {
for (int j = 0; j < length - str.length(); j++) {
resultBuf.append(" ");
}
}
resultBuf.append(" | ");
}
getWriter().writeResult(resultBuf.toString().trim());
}
getWriter().writeResult(frame);
} catch (Exception e) {
throw new OdpsException(e.getMessage(), e);
} finally {
reader.close();
}
}