diff --git a/fe/src/main/java/org/apache/doris/analysis/DescriptorTable.java b/fe/src/main/java/org/apache/doris/analysis/DescriptorTable.java index 00040b16b1..4b68673d51 100644 --- a/fe/src/main/java/org/apache/doris/analysis/DescriptorTable.java +++ b/fe/src/main/java/org/apache/doris/analysis/DescriptorTable.java @@ -41,17 +41,15 @@ import java.util.List; public class DescriptorTable { private final static Logger LOG = LogManager.getLogger(DescriptorTable.class); - private final HashMap tupleDescs; + private final HashMap tupleDescs = new HashMap(); // List of referenced tables with no associated TupleDescriptor to ship to the BE. // For example, the output table of an insert query. - private final List referencedTables; + private final List
referencedTables = new ArrayList
();; private final IdGenerator tupleIdGenerator_ = TupleId.createGenerator(); private final IdGenerator slotIdGenerator_ = SlotId.createGenerator(); private final HashMap slotDescs = Maps.newHashMap(); public DescriptorTable() { - tupleDescs = new HashMap(); - referencedTables = new ArrayList
(); } public TupleDescriptor createTupleDescriptor() { diff --git a/fe/src/main/java/org/apache/doris/planner/StreamLoadPlanner.java b/fe/src/main/java/org/apache/doris/planner/StreamLoadPlanner.java index 6bc92a944c..bc96844e9c 100644 --- a/fe/src/main/java/org/apache/doris/planner/StreamLoadPlanner.java +++ b/fe/src/main/java/org/apache/doris/planner/StreamLoadPlanner.java @@ -77,19 +77,24 @@ public class StreamLoadPlanner { this.db = db; this.destTable = destTable; this.streamLoadTask = streamLoadTask; - analyzer = new Analyzer(Catalog.getInstance(), null); + } + + private void resetAnalyzer() { + analyzer = new Analyzer(Catalog.getCurrentCatalog(), null); // TODO(cmy): currently we do not support UDF in stream load command. // Because there is no way to check the privilege of accessing UDF.. analyzer.setUDFAllowed(false); descTable = analyzer.getDescTbl(); } + // can only be called after "plan()", or it will return null public OlapTable getDestTable() { return destTable; } // create the plan. the plan's query id and load id are same, using the parameter 'loadId' public TExecPlanFragmentParams plan(TUniqueId loadId) throws UserException { + resetAnalyzer(); // construct tuple descriptor, used for scanNode and dataSink TupleDescriptor tupleDesc = descTable.createTupleDescriptor("DstTableTuple"); boolean negative = streamLoadTask.getNegative();