private static Map<String, TimeseriesContext> getTimeseriesSchemaInfoMap(
      Map.Entry<PartialPath, Map<PartialPath, List<TimeseriesContext>>> entryMap,
      DataDriverContext context) {
    Map<String, TimeseriesContext> timeseriesSchemaInfoMap = new HashMap<>();
    for (Map.Entry<PartialPath, List<TimeseriesContext>> entry : entryMap.getValue().entrySet()) {
      PartialPath path = entry.getKey();
      if (path instanceof MeasurementPath) {
        timeseriesSchemaInfoMap.put(path.getMeasurement(), entry.getValue().get(0));
        context.addPath(
            new NonAlignedFullPath(
                path.getIDeviceID(),
                new MeasurementSchema(
                    path.getMeasurement(),
                    TSDataType.valueOf(entry.getValue().get(0).getDataType()))));
      } else if (path instanceof AlignedPath) {
        AlignedPath alignedPath = (AlignedPath) path;
        List<String> measurementList = alignedPath.getMeasurementList();
        if (measurementList.size() != entry.getValue().size()) {
          throw new IllegalArgumentException(
              "The size of measurementList and timeseriesSchemaInfoList should be equal in aligned path.");
        }
        int size = measurementList.size();
        List<IMeasurementSchema> schemaList = new ArrayList<>(size);
        for (int i = 0; i < size; i++) {
          timeseriesSchemaInfoMap.put(measurementList.get(i), entry.getValue().get(i));
          schemaList.add(
              new MeasurementSchema(
                  measurementList.get(i),
                  TSDataType.valueOf(entry.getValue().get(i).getDataType())));
        }
        context.addPath(new AlignedFullPath(path.getIDeviceID(), measurementList, schemaList));
      }
    }
    return timeseriesSchemaInfoMap;
  }
Now, we allocate children to each pipeline as average as possible. For example, 5 children with
3 dop, the children group will be [1, 2, 2]. After we can estimate the workload of each
operator, maybe we can allocate based on workload rather than child number.

<p>If child is ExchangeNode, it won't affect the children number of current group.

<p>This method can only be invoked when dop <= localChildrenSize.
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/OperatorTreeGenerator.java