docs: private static ThriftTable parseThriftDdl(String ddl)
      {
          if (isNullOrEmpty(ddl)) {
              return null;
          }
          String[] parts = ddl.trim().split("\\s+");
          checkArgument(parts.length >= 5, "Invalid Thrift DDL " + ddl);
          checkArgument(THRIFT_STRUCT.equals(parts[0]), "Thrift DDL should start with " + THRIFT_STRUCT);
          ThriftTable thriftTable = new ThriftTable();
          thriftTable.setTableName(parts[1]);
          checkArgument(START_STRUCT.equals(parts[2]), "Invalid Thrift DDL " + ddl);
          checkArgument(parts[parts.length - 1].endsWith(END_STRUCT), "Invalid Thrift DDL " + ddl);
          String lastColumnNameWithEndStruct = parts[parts.length - 1];
          parts[parts.length - 1] = lastColumnNameWithEndStruct.substring(0, lastColumnNameWithEndStruct.length() - 1);
          List<ThriftField> fields = new ArrayList<>();
          for (int i = 3; i < parts.length - 1; i += 2) {
              ThriftField thriftField = new ThriftField();
              thriftField.setType(parts[i]);
              String columnNameWithFieldSeparator = parts[i + 1];
              if (columnNameWithFieldSeparator.endsWith(FIELD_SEPARATOR)) {
                  parts[i + 1] = columnNameWithFieldSeparator.substring(0, columnNameWithFieldSeparator.length() - 1);
              }
              thriftField.setName(parts[i + 1]);
              fields.add(thriftField);
          }
          thriftTable.setFields(fields);
  
          return thriftTable;
      }