private void analyzeSelectSingleColumn(
        Expression expression,
        QuerySpecification node,
        Scope scope,
        ImmutableList.Builder<Expression> outputExpressionBuilder,
        ImmutableList.Builder<Analysis.SelectExpression> selectExpressionBuilder) {
      ExpressionAnalysis expressionAnalysis = analyzeExpression(expression, scope);
      analysis.recordSubqueries(node, expressionAnalysis);
      outputExpressionBuilder.add(expression);
      selectExpressionBuilder.add(new Analysis.SelectExpression(expression, Optional.empty()));

      Type type = expressionAnalysis.getType(expression);
      if (node.getSelect().isDistinct() && !type.isComparable()) {
        throw new SemanticException(
            String.format(
                "DISTINCT can only be applied to comparable types (actual: %s): %s",
                type, expression));
      }
    }
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