public static List<String> splitPartialBuiltinAggregation(TAggregationType aggregationType) {
    switch (aggregationType) {
      case FIRST_VALUE:
        return Collections.singletonList(SqlConstant.MIN_TIME);
      case LAST_VALUE:
        return Collections.singletonList(SqlConstant.MAX_TIME);
      case STDDEV:
        return Collections.singletonList(addPartialSuffix(SqlConstant.STDDEV));
      case STDDEV_POP:
        return Collections.singletonList(addPartialSuffix(SqlConstant.STDDEV_POP));
      case STDDEV_SAMP:
        return Collections.singletonList(addPartialSuffix(SqlConstant.STDDEV_SAMP));
      case VARIANCE:
        return Collections.singletonList(addPartialSuffix(SqlConstant.VARIANCE));
      case VAR_POP:
        return Collections.singletonList(addPartialSuffix(SqlConstant.VAR_POP));
      case VAR_SAMP:
        return Collections.singletonList(addPartialSuffix(SqlConstant.VAR_SAMP));
      case MAX_BY:
        return Collections.singletonList(addPartialSuffix(SqlConstant.MAX_BY));
      case MIN_BY:
        return Collections.singletonList(addPartialSuffix(SqlConstant.MIN_BY));
      case AVG:
        return Arrays.asList(SqlConstant.COUNT, SqlConstant.SUM);
      case TIME_DURATION:
        return Arrays.asList(SqlConstant.MAX_TIME, SqlConstant.MIN_TIME);
      case SUM:
      case MIN_VALUE:
      case MAX_VALUE:
      case EXTREME:
      case COUNT:
      case COUNT_TIME:
      case MIN_TIME:
      case MAX_TIME:
      case COUNT_IF:
      case MODE:
        return Collections.emptyList();
      default:
        throw new IllegalArgumentException(
            String.format("Invalid Aggregation function: %s", aggregationType));
    }
  }
judge whether the order of aggregation calculation is consistent with the order of traversing
data
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/SchemaUtils.java