[fix](nereids)support topn-filter for non pipeline engine #32397

This commit is contained in:
minghong
2024-03-19 17:27:09 +08:00
committed by yiguolei
parent f99db38998
commit 66fe61b591
3 changed files with 18 additions and 3 deletions

View File

@ -3605,7 +3605,10 @@ public class Coordinator implements CoordInterface {
List<TExecPlanFragmentParams> toThrift(int backendNum) {
List<TExecPlanFragmentParams> paramsList = Lists.newArrayList();
Set<Integer> topnFilterSources = scanNodes.stream()
.filter(scanNode -> scanNode instanceof OlapScanNode)
.flatMap(scanNode -> ((OlapScanNode) scanNode).getTopnFilterSortNodes().stream())
.map(sort -> sort.getId().asInt()).collect(Collectors.toSet());
for (int i = 0; i < instanceExecParams.size(); ++i) {
final FInstanceExecParam instanceExecParam = instanceExecParams.get(i);
TExecPlanFragmentParams params = new TExecPlanFragmentParams();
@ -3617,11 +3620,17 @@ public class Coordinator implements CoordInterface {
params.setBuildHashTableForBroadcastJoin(instanceExecParam.buildHashTableForBroadcastJoin);
params.params.setQueryId(queryId);
params.params.setFragmentInstanceId(instanceExecParam.instanceId);
Map<Integer, List<TScanRangeParams>> scanRanges = instanceExecParam.perNodeScanRanges;
if (scanRanges == null) {
scanRanges = Maps.newHashMap();
}
if (!topnFilterSources.isEmpty()) {
// topn_filter_source_node_ids is used by nereids not by legacy planner.
// if there is no topnFilterSources, do not set it.
// topn_filter_source_node_ids=null means legacy planner
params.params.topn_filter_source_node_ids = Lists.newArrayList(topnFilterSources);
}
params.params.setPerNodeScanRanges(scanRanges);
params.params.setPerExchNumSenders(perExchNumSenders);
@ -3692,7 +3701,6 @@ public class Coordinator implements CoordInterface {
rf.getFilterId().asInt(), rf.toThrift());
}
}
params.setFileScanParams(fileScanRangeParamsMap);
paramsList.add(params);
}