@Override
  public boolean equals(Object o) {
    if (this == o) {
      return true;
    }
    if (o == null || getClass() != o.getClass()) {
      return false;
    }
    if (!super.equals(o)) {
      return false;
    }
    DeviceViewNode that = (DeviceViewNode) o;
    return mergeOrderParameter.equals(that.mergeOrderParameter)
        && devices.equals(that.devices)
        && outputColumnNames.equals(that.outputColumnNames)
        && deviceToMeasurementIndexesMap.equals(that.deviceToMeasurementIndexesMap);
  }
DeviceViewNode is responsible for constructing a device-based view of a set of series. And output
the result with specific order. The order could be 'order by device' or 'order by timestamp'

<p>Each output from its children should have the same schema. That means, the columns should be
same between these TsBlocks. If the input TsBlock contains n columns, the device-based view will
contain n+1 columns where the new column is Device column.
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/DeviceViewNode.java