public static Aggregation deserialize(ByteBuffer byteBuffer) {
      ResolvedFunction function = ResolvedFunction.deserialize(byteBuffer);
      int size = ReadWriteIOUtils.readInt(byteBuffer);
      List<Expression> arguments = new ArrayList<>(size);
      while (size-- > 0) {
        arguments.add(Expression.deserialize(byteBuffer));
      }
      boolean distinct = ReadWriteIOUtils.readBool(byteBuffer);
      Optional<Symbol> filter = Optional.empty();
      if (ReadWriteIOUtils.readBool(byteBuffer)) {
        filter = Optional.of(Symbol.deserialize(byteBuffer));
      }
      Optional<OrderingScheme> orderingScheme = Optional.empty();
      if (ReadWriteIOUtils.readBool(byteBuffer)) {
        orderingScheme = Optional.of(OrderingScheme.deserialize(byteBuffer));
      }
      Optional<Symbol> mask = Optional.empty();
      if (ReadWriteIOUtils.readBool(byteBuffer)) {
        mask = Optional.of(Symbol.deserialize(byteBuffer));
      }
      return new Aggregation(function, arguments, distinct, filter, orderingScheme, mask);
    }
@return whether this node should produce default output in case of no input pages. For example
    for query:
    <p>SELECT count(*) FROM nation WHERE nationkey < 0
    <p>A default output of "0" is expected to be produced by FINAL aggregation operator.
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/AggregationNode.java