diff --git a/fe/fe-core/src/main/java/org/apache/doris/load/Load.java b/fe/fe-core/src/main/java/org/apache/doris/load/Load.java index 905f9507378a81..ea381977e24f78 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/load/Load.java +++ b/fe/fe-core/src/main/java/org/apache/doris/load/Load.java @@ -1049,8 +1049,12 @@ private static void initColumns(Table tbl, List columnExprs, for (ImportColumnDesc importColumnDesc : copiedColumnExprs) { // make column name case match with real column name String columnName = importColumnDesc.getColumnName(); - String realColName = tbl.getColumn(columnName) == null ? columnName - : tbl.getColumn(columnName).getName(); + String realColName; + if (tbl.getColumn(columnName) == null || importColumnDesc.getExpr() == null) { + realColName = columnName; + } else { + realColName = tbl.getColumn(columnName).getName(); + } if (importColumnDesc.getExpr() != null) { Expr expr = transformHadoopFunctionExpr(tbl, realColName, importColumnDesc.getExpr()); exprsByName.put(realColName, expr); diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/BrokerScanNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/BrokerScanNode.java index 73aa1fb04d3cf9..7faacde1dbf82f 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/BrokerScanNode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/BrokerScanNode.java @@ -247,8 +247,8 @@ private void initParams(ParamCreateContext context) */ private void initColumns(ParamCreateContext context) throws UserException { context.srcTupleDescriptor = analyzer.getDescTbl().createTupleDescriptor(); - context.slotDescByName = Maps.newHashMap(); - context.exprMap = Maps.newHashMap(); + context.slotDescByName = Maps.newTreeMap(String.CASE_INSENSITIVE_ORDER); + context.exprMap = Maps.newTreeMap(String.CASE_INSENSITIVE_ORDER); // for load job, column exprs is got from file group // for query, there is no column exprs, they will be got from table's schema in "Load.initColumns" diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/StreamLoadScanNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/StreamLoadScanNode.java index 0930bad5f0036f..65a265d9c56009 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/StreamLoadScanNode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/StreamLoadScanNode.java @@ -66,8 +66,11 @@ public class StreamLoadScanNode extends LoadScanNode { private TupleDescriptor srcTupleDesc; private TBrokerScanRange brokerScanRange; - private Map slotDescByName = Maps.newHashMap(); - private Map exprsByName = Maps.newHashMap(); + // If use case sensitive map, for example, + // the column name 「A」 in the table and the mapping '(a) set (A = a)' in load sql, + // Slotdescbyname stores「a」, later will use 「a」to get table's 「A」 column info, will throw exception. + private final Map slotDescByName = Maps.newTreeMap(String.CASE_INSENSITIVE_ORDER); + private final Map exprsByName = Maps.newTreeMap(String.CASE_INSENSITIVE_ORDER); // used to construct for streaming loading public StreamLoadScanNode(