private void analyzeFill(Fill node, Scope scope) {
      Analysis.FillAnalysis fillAnalysis;
      if (node.getFillMethod() == FillPolicy.PREVIOUS) {
        FieldReference timeColumn = null;
        List<FieldReference> groupingKeys = null;
        if (node.getTimeBound().isPresent() || node.getFillGroupingElements().isPresent()) {
          timeColumn = getHelperColumn(node, scope, FillPolicy.PREVIOUS);
          ExpressionAnalyzer.analyzeExpression(
              metadata,
              queryContext,
              sessionContext,
              statementAnalyzerFactory,
              accessControl,
              scope,
              analysis,
              timeColumn,
              WarningCollector.NOOP,
              correlationSupport);

          groupingKeys = analyzeFillGroup(node, scope, FillPolicy.PREVIOUS);
        }
        fillAnalysis =
            new Analysis.PreviousFillAnalysis(
                node.getTimeBound().orElse(null), timeColumn, groupingKeys);
      } else if (node.getFillMethod() == FillPolicy.CONSTANT) {
        Literal literal = node.getFillValue().get();
        ExpressionAnalyzer.analyzeExpression(
            metadata,
            queryContext,
            sessionContext,
            statementAnalyzerFactory,
            accessControl,
            scope,
            analysis,
            literal,
            WarningCollector.NOOP,
            correlationSupport);
        fillAnalysis = new Analysis.ValueFillAnalysis(literal);
      } else if (node.getFillMethod() == FillPolicy.LINEAR) {
        FieldReference helperColumn = getHelperColumn(node, scope, FillPolicy.LINEAR);
        ExpressionAnalyzer.analyzeExpression(
            metadata,
            queryContext,
            sessionContext,
            statementAnalyzerFactory,
            accessControl,
            scope,
            analysis,
            helperColumn,
            WarningCollector.NOOP,
            correlationSupport);
        List<FieldReference> groupingKeys = analyzeFillGroup(node, scope, FillPolicy.LINEAR);
        fillAnalysis = new Analysis.LinearFillAnalysis(helperColumn, groupingKeys);
      } else {
        throw new IllegalArgumentException("Unknown fill method: " + node.getFillMethod());
      }

      analysis.setFill(node, fillAnalysis);
    }
Check if there is Columns function in expression, and verify they are same if there are multi
Column functions.

@param expression input expression
@return if there is Columns function in expression
@throws SemanticException if there are multi Columns functions but different
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/analyzer/StatementAnalyzer.java