public void run()

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();
    }
  }