Skip to content

Commit a52fb07

Browse files
committed
remove OutputNode from CopyToNode
1 parent 20352f7 commit a52fb07

7 files changed

Lines changed: 33 additions & 32 deletions

File tree

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/header/DatasetHeader.java

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
package org.apache.iotdb.db.queryengine.common.header;
2121

2222
import org.apache.iotdb.commons.schema.column.ColumnHeader;
23-
import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNode;
2423
import org.apache.iotdb.db.queryengine.plan.relational.planner.Symbol;
2524
import org.apache.iotdb.db.queryengine.plan.relational.planner.node.OutputNode;
2625

@@ -91,11 +90,7 @@ public void setTreeColumnToTsBlockIndexMap(List<String> outputColumnNames) {
9190
}
9291

9392
public void setTableColumnToTsBlockIndexMap(OutputNode outputNode) {
94-
setTableColumnToTsBlockIndexMap(outputNode, outputNode.getChild());
95-
}
96-
97-
public void setTableColumnToTsBlockIndexMap(OutputNode outputNode, PlanNode outputNodeChild) {
98-
List<Symbol> childOutputSymbols = outputNodeChild.getOutputSymbols();
93+
List<Symbol> childOutputSymbols = outputNode.getChild().getOutputSymbols();
9994
Map<Symbol, Integer> outputSymbolsIndexMap = new HashMap<>(childOutputSymbols.size());
10095
for (int i = 0; i < childOutputSymbols.size(); i++) {
10196
outputSymbolsIndexMap.put(childOutputSymbols.get(i), i);

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/copyto/TableCopyToOperator.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public class TableCopyToOperator implements ProcessOperator {
4747
private final String targetFilePath;
4848
private final CopyToOptions options;
4949
private final List<ColumnHeader> innerQueryColumnHeaders;
50-
private final List<Integer> columnIndex2TsBlockColumnIndexList;
50+
private final int[] columnIndex2TsBlockColumnIndex;
5151

5252
private IFormatCopyToWriter writer;
5353
private File targetFile;
@@ -60,13 +60,13 @@ public TableCopyToOperator(
6060
String targetFilePath,
6161
CopyToOptions options,
6262
List<ColumnHeader> innerQueryColumnHeaders,
63-
List<Integer> columnIndex2TsBlockColumnIndexList) {
63+
int[] columnIndex2TsBlockColumnIndex) {
6464
this.operatorContext = operatorContext;
6565
this.childOperator = child;
6666
this.targetFilePath = targetFilePath;
6767
this.options = options;
6868
this.innerQueryColumnHeaders = innerQueryColumnHeaders;
69-
this.columnIndex2TsBlockColumnIndexList = columnIndex2TsBlockColumnIndexList;
69+
this.columnIndex2TsBlockColumnIndex = columnIndex2TsBlockColumnIndex;
7070
}
7171

7272
@Override
@@ -104,7 +104,7 @@ private IFormatCopyToWriter getWriter() throws Exception {
104104
this.targetFile,
105105
(CopyToTsFileOptions) options,
106106
innerQueryColumnHeaders,
107-
columnIndex2TsBlockColumnIndexList);
107+
columnIndex2TsBlockColumnIndex);
108108
}
109109
return writer;
110110
}
@@ -180,8 +180,7 @@ public long ramBytesUsed() {
180180
+ RamUsageEstimator.sizeOf(targetFilePath)
181181
+ RamUsageEstimator.sizeOfObject(innerQueryColumnHeaders)
182182
+ MemoryEstimationHelper.getEstimatedSizeOfAccountableObject(operatorContext)
183-
+ MemoryEstimationHelper.getEstimatedSizeOfIntegerArrayList(
184-
columnIndex2TsBlockColumnIndexList)
183+
+ RamUsageEstimator.sizeOf(columnIndex2TsBlockColumnIndex)
185184
+ options.estimatedMaxRamBytesInWrite()
186185
+ childOperator.ramBytesUsed();
187186
}

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/copyto/tsfile/TsFileFormatCopyToWriter.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -60,15 +60,15 @@ public TsFileFormatCopyToWriter(
6060
File file,
6161
CopyToTsFileOptions copyToOptions,
6262
List<ColumnHeader> innerQueryDatasetHeader,
63-
List<Integer> columnIndex2TsBlockColumnIndexList) {
63+
int[] columnIndex2TsBlockColumnIndex) {
6464
this.targetFile = file;
6565
this.targetTableName = copyToOptions.getTargetTableName();
6666
this.targetTimeColumn = copyToOptions.getTargetTimeColumn();
6767
this.generateNewTimeColumn = copyToOptions.isGenerateNewTimeColumn();
6868
targetTagColumns = copyToOptions.getTargetTagColumns();
6969

7070
ColumnHeader[] columnHeadersMatchChildTsBlock =
71-
getColumnHeadersMatchTsBlock(innerQueryDatasetHeader, columnIndex2TsBlockColumnIndexList);
71+
getColumnHeadersMatchTsBlock(innerQueryDatasetHeader, columnIndex2TsBlockColumnIndex);
7272
List<ColumnSchema> columnSchemas =
7373
new ArrayList<>(columnHeadersMatchChildTsBlock.length + (generateNewTimeColumn ? 1 : 0));
7474
Map<String, Integer> columnNameIndexMapInDatasetHeader = new HashMap<>();
@@ -133,11 +133,10 @@ public TsFileFormatCopyToWriter(
133133
}
134134

135135
private ColumnHeader[] getColumnHeadersMatchTsBlock(
136-
List<ColumnHeader> queryOutputColumnHeaders,
137-
List<Integer> columnIndex2TsBlockColumnIndexList) {
136+
List<ColumnHeader> queryOutputColumnHeaders, int[] columnIndex2TsBlockColumnIndexList) {
138137
ColumnHeader[] columnHeadersMatchTsBlock = new ColumnHeader[queryOutputColumnHeaders.size()];
139-
for (int i = 0; i < columnIndex2TsBlockColumnIndexList.size(); i++) {
140-
int tsBlockIndex = columnIndex2TsBlockColumnIndexList.get(i);
138+
for (int i = 0; i < columnIndex2TsBlockColumnIndexList.length; i++) {
139+
int tsBlockIndex = columnIndex2TsBlockColumnIndexList[i];
141140
columnHeadersMatchTsBlock[tsBlockIndex] = queryOutputColumnHeaders.get(i);
142141
}
143142
return columnHeadersMatchTsBlock;

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/TableOperatorGenerator.java

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
import org.apache.iotdb.db.conf.IoTDBDescriptor;
3232
import org.apache.iotdb.db.exception.sql.SemanticException;
3333
import org.apache.iotdb.db.queryengine.common.FragmentInstanceId;
34-
import org.apache.iotdb.db.queryengine.common.header.DatasetHeader;
3534
import org.apache.iotdb.db.queryengine.execution.aggregation.timerangeiterator.ITableTimeRangeIterator;
3635
import org.apache.iotdb.db.queryengine.execution.aggregation.timerangeiterator.TableDateBinTimeRangeIterator;
3736
import org.apache.iotdb.db.queryengine.execution.aggregation.timerangeiterator.TableSingleTimeWindowIterator;
@@ -3480,8 +3479,17 @@ public Operator visitExplainAnalyze(ExplainAnalyzeNode node, LocalExecutionPlanC
34803479
public Operator visitCopyTo(CopyToNode node, LocalExecutionPlanContext context) {
34813480
PlanNode childNode = node.getChild();
34823481

3483-
DatasetHeader datasetHeader = node.getInnerQueryDatasetHeader();
3484-
datasetHeader.setTableColumnToTsBlockIndexMap(node.getInnerQueryOutputNode(), childNode);
3482+
List<Symbol> innerQueryOutputSymbols = node.getInnerQueryOutputSymbols();
3483+
List<Symbol> childOutputSymbols = childNode.getOutputSymbols();
3484+
Map<Symbol, Integer> childOutputSymbolsIndexMap = new HashMap<>(childOutputSymbols.size());
3485+
for (int i = 0; i < childOutputSymbols.size(); i++) {
3486+
childOutputSymbolsIndexMap.put(childOutputSymbols.get(i), i);
3487+
}
3488+
int[] columnIndex2TsBlockColumnIndexList = new int[innerQueryOutputSymbols.size()];
3489+
for (int i = 0; i < innerQueryOutputSymbols.size(); i++) {
3490+
int index = childOutputSymbolsIndexMap.get(innerQueryOutputSymbols.get(i));
3491+
columnIndex2TsBlockColumnIndexList[i] = index;
3492+
}
34853493

34863494
Operator operator = childNode.accept(this, context);
34873495

@@ -3497,8 +3505,8 @@ public Operator visitCopyTo(CopyToNode node, LocalExecutionPlanContext context)
34973505
operator,
34983506
node.getTargetFilePath(),
34993507
node.getCopyToOptions(),
3500-
datasetHeader.getColumnHeaders(),
3501-
datasetHeader.getColumnIndex2TsBlockColumnIndexList());
3508+
node.getInnerQueryDatasetHeader().getColumnHeaders(),
3509+
columnIndex2TsBlockColumnIndexList);
35023510
}
35033511

35043512
@Override

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/TableLogicalPlanner.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -655,7 +655,7 @@ private RelationPlan createRelationPlan(final CopyTo statement, final Analysis a
655655
getChildPermittedOutputs(
656656
analysis, statement.getQueryStatement(), innerQueryRelationPlan),
657657
innerQueryRespDatasetHeader,
658-
outputNode);
658+
outputNode.getOutputSymbols());
659659
return new RelationPlan(
660660
newRoot,
661661
innerQueryRelationPlan.getScope(),

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/CopyToNode.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public class CopyToNode extends SingleChildProcessNode {
4040
private final String targetFilePath;
4141
private final CopyToOptions copyToOptions;
4242
private final List<Symbol> childPermittedOutputs;
43-
private final OutputNode innerQueryOutputNode;
43+
private final List<Symbol> innerQueryOutputSymbols;
4444
private final DatasetHeader innerQueryDatasetHeader;
4545

4646
public CopyToNode(
@@ -50,22 +50,22 @@ public CopyToNode(
5050
CopyToOptions copyToOptions,
5151
List<Symbol> childPermittedOutputs,
5252
DatasetHeader innerQueryDatasetHeader,
53-
OutputNode innerQueryOutputNode) {
53+
List<Symbol> innerQueryOutputSymbols) {
5454
super(id);
5555
this.child = child;
5656
this.targetFilePath = targetFilePath;
5757
this.copyToOptions = copyToOptions;
5858
this.childPermittedOutputs = childPermittedOutputs;
5959
this.innerQueryDatasetHeader = innerQueryDatasetHeader;
60-
this.innerQueryOutputNode = innerQueryOutputNode;
60+
this.innerQueryOutputSymbols = innerQueryOutputSymbols;
6161
}
6262

6363
public DatasetHeader getInnerQueryDatasetHeader() {
6464
return innerQueryDatasetHeader;
6565
}
6666

67-
public OutputNode getInnerQueryOutputNode() {
68-
return innerQueryOutputNode;
67+
public List<Symbol> getInnerQueryOutputSymbols() {
68+
return innerQueryOutputSymbols;
6969
}
7070

7171
public String getTargetFilePath() {
@@ -89,7 +89,7 @@ public PlanNode clone() {
8989
copyToOptions,
9090
childPermittedOutputs,
9191
innerQueryDatasetHeader,
92-
innerQueryOutputNode);
92+
innerQueryOutputSymbols);
9393
}
9494

9595
@Override
@@ -120,7 +120,7 @@ public PlanNode replaceChildren(List<PlanNode> newChildren) {
120120
copyToOptions,
121121
childPermittedOutputs,
122122
innerQueryDatasetHeader,
123-
innerQueryOutputNode);
123+
innerQueryOutputSymbols);
124124
}
125125

126126
@Override

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/UnaliasSymbolReferences.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -403,7 +403,7 @@ public PlanAndMappings visitCopyTo(CopyToNode node, UnaliasContext context) {
403403
node.getCopyToOptions(),
404404
newChildPermittedOutputs,
405405
node.getInnerQueryDatasetHeader(),
406-
node.getInnerQueryOutputNode()),
406+
node.getInnerQueryOutputSymbols()),
407407
mapping);
408408
}
409409

0 commit comments

Comments
 (0)