@Override
  public long ramBytesUsed() {
    if (ramBytesUsed > 0) {
      return ramBytesUsed;
    }
    ramBytesUsed =
        InsertNodeMemoryEstimator.sizeOfPartialPath(devicePath)
            + InsertNodeMemoryEstimator.sizeOfMeasurementSchemas(measurementSchemas)
            + InsertNodeMemoryEstimator.sizeOfStringArray(measurements)
            + RamUsageEstimator.shallowSizeOf(dataTypes)
            + RamUsageEstimator.shallowSizeOf(columnCategories)
            // We assume that the integers are all cached by JVM
            + shallowSizeOfList(idColumnIndices)
            + shallowSizeOfList(attrColumnIndices)
            + shallowSizeOfList(logicalViewSchemaList)
            + (Objects.nonNull(logicalViewSchemaList)
                ? logicalViewSchemaList.stream()
                    .mapToLong(LogicalViewSchema::ramBytesUsed)
                    .reduce(0L, Long::sum)
                : 0L)
            + shallowSizeOfList(indexOfSourcePathsOfLogicalViews)
            + RamUsageEstimator.sizeOf(databaseName)
            + calculateBytesUsed();
    return ramBytesUsed;
  }
This function is used in splitting. Traverse two lists: logicalViewSchemaList, measurements,
then find out all devices in this statement. Those devices will map to their measurements,
recorded in a pair of measurement name and the index of measurement schemas
(this.measurementSchemas).

@return map from device path to its measurements.
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertBaseStatement.java