You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by hu...@apache.org on 2022/10/29 12:36:41 UTC
[iotdb] 02/03: implement EXPLAIN SELECT INTO
This is an automated email from the ASF dual-hosted git repository.
hui pushed a commit to branch lmh/selectIntoFix
in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 495babd6487faffdbc86dea6170715fe3088e187
Author: liuminghui233 <54...@qq.com>
AuthorDate: Sat Oct 29 19:51:03 2022 +0800
implement EXPLAIN SELECT INTO
---
.../plan/planner/plan/node/PlanGraphPrinter.java | 51 ++++++++++++++++++++++
1 file changed, 51 insertions(+)
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/PlanGraphPrinter.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/PlanGraphPrinter.java
index e803180818..3f91f89c0d 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/PlanGraphPrinter.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/PlanGraphPrinter.java
@@ -21,15 +21,18 @@ package org.apache.iotdb.db.mpp.plan.planner.plan.node;
import org.apache.iotdb.common.rpc.thrift.TRegionReplicaSet;
import org.apache.iotdb.commons.partition.DataPartition;
+import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.db.mpp.plan.expression.Expression;
import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.AggregationNode;
import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.DeviceMergeNode;
+import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.DeviceViewIntoNode;
import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.DeviceViewNode;
import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.ExchangeNode;
import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.FillNode;
import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.FilterNode;
import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.GroupByLevelNode;
import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.GroupByTagNode;
+import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.IntoNode;
import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.LimitNode;
import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.OffsetNode;
import org.apache.iotdb.db.mpp.plan.planner.plan.node.process.SlidingWindowAggregationNode;
@@ -43,6 +46,9 @@ import org.apache.iotdb.db.mpp.plan.planner.plan.node.source.SeriesAggregationSc
import org.apache.iotdb.db.mpp.plan.planner.plan.node.source.SeriesScanNode;
import org.apache.iotdb.db.mpp.plan.planner.plan.parameter.AggregationDescriptor;
import org.apache.iotdb.db.mpp.plan.planner.plan.parameter.CrossSeriesAggregationDescriptor;
+import org.apache.iotdb.db.mpp.plan.planner.plan.parameter.DeviceViewIntoPathDescriptor;
+import org.apache.iotdb.db.mpp.plan.planner.plan.parameter.IntoPathDescriptor;
+import org.apache.iotdb.tsfile.utils.Pair;
import org.apache.commons.lang3.Validate;
@@ -292,6 +298,51 @@ public class PlanGraphPrinter extends PlanVisitor<List<String>, PlanGraphPrinter
return render(node, boxValue, context);
}
+ @Override
+ public List<String> visitInto(IntoNode node, GraphContext context) {
+ List<String> boxValue = new ArrayList<>();
+ boxValue.add(String.format("Into-%s", node.getPlanNodeId().getId()));
+ IntoPathDescriptor descriptor = node.getIntoPathDescriptor();
+ drawSourceTargetPath(
+ boxValue,
+ descriptor.getSourceTargetPathPairList(),
+ descriptor.getTargetDeviceToAlignedMap());
+ return render(node, boxValue, context);
+ }
+
+ @Override
+ public List<String> visitDeviceViewInto(DeviceViewIntoNode node, GraphContext context) {
+ List<String> boxValue = new ArrayList<>();
+ boxValue.add(String.format("DeviceViewInto-%s", node.getPlanNodeId().getId()));
+ DeviceViewIntoPathDescriptor descriptor = node.getDeviceViewIntoPathDescriptor();
+ Map<String, List<Pair<String, PartialPath>>> deviceToSourceTargetPathPairListMap =
+ descriptor.getDeviceToSourceTargetPathPairListMap();
+ for (String deviceName : deviceToSourceTargetPathPairListMap.keySet()) {
+ boxValue.add(String.format("Device [%s]:", deviceName));
+ drawSourceTargetPath(
+ boxValue,
+ deviceToSourceTargetPathPairListMap.get(deviceName),
+ descriptor.getTargetDeviceToAlignedMap());
+ }
+ return render(node, boxValue, context);
+ }
+
+ private void drawSourceTargetPath(
+ List<String> boxValue,
+ List<Pair<String, PartialPath>> sourceTargetPathPairList,
+ Map<String, Boolean> targetDeviceToAlignedMap) {
+ for (Pair<String, PartialPath> sourceTargetPathPair : sourceTargetPathPairList) {
+ boxValue.add(
+ String.format(
+ "%s -> %s %s",
+ sourceTargetPathPair.left,
+ sourceTargetPathPair.right,
+ targetDeviceToAlignedMap.get(sourceTargetPathPair.right.getDevice())
+ ? "[ALIGNED]"
+ : ""));
+ }
+ }
+
private String printRegion(TRegionReplicaSet regionReplicaSet) {
return String.format(
"Partition: %s",