This is an automated email from the ASF dual-hosted git repository. chenyz pushed a commit to branch udtf-optimize in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit d734b704d3686e1a3deab56e4eb933ea77fd612c Author: Chen YZ <[email protected]> AuthorDate: Sun Feb 23 22:29:53 2025 +0800 save --- .../rule/PruneTableFunctionProcessorColumns.java | 1 + .../PruneTableFunctionProcessorSourceColumns.java | 1 + .../planner/node/SortBasedGroupNode.java | 6 ++--- .../planner/optimizations/ParallelizeGrouping.java | 30 +++++++++++----------- 4 files changed, 20 insertions(+), 18 deletions(-) diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/iterative/rule/PruneTableFunctionProcessorColumns.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/iterative/rule/PruneTableFunctionProcessorColumns.java index 1e69fce28d3..9feefcea2d7 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/iterative/rule/PruneTableFunctionProcessorColumns.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/iterative/rule/PruneTableFunctionProcessorColumns.java @@ -83,6 +83,7 @@ public class PruneTableFunctionProcessorColumns prunedPassThroughSpecifications, node.getRequiredSymbols(), node.getDataOrganizationSpecification(), + node.isRowSemantic(), node.getArguments())); } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/iterative/rule/PruneTableFunctionProcessorSourceColumns.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/iterative/rule/PruneTableFunctionProcessorSourceColumns.java index dca9f28a15c..f2d6d5a528b 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/iterative/rule/PruneTableFunctionProcessorSourceColumns.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/iterative/rule/PruneTableFunctionProcessorSourceColumns.java @@ -91,6 +91,7 @@ public class PruneTableFunctionProcessorSourceColumns implements Rule<TableFunct node.getPassThroughSpecification(), node.getRequiredSymbols(), node.getDataOrganizationSpecification(), + node.isRowSemantic(), node.getArguments()))) .orElse(Result.empty()); } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/SortBasedGroupNode.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/SortBasedGroupNode.java index 77bc98e454c..f3d3affad0e 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/SortBasedGroupNode.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/SortBasedGroupNode.java @@ -38,15 +38,15 @@ import java.util.List; * based on SortNode. It will only be generated some special node that required grouping source, * such as FillNode and TableFunctionNode. * - * <p>SortBasedGroupNode's ordering schema consists of two parts: PartitionKey and SortKey. It - * guarantees to return data grouped by PartitionKey and sorted by SortKey. For example, PARTITION + * <p>SortBasedGroupNode's ordering schema consists of two parts: PartitionKey and OrderKey. It + * guarantees to return data grouped by PartitionKey and sorted by OrderKey. For example, PARTITION * BY device_id ORDER BY time will return data grouped by device_id, and in each group, data will be * sorted by time. */ public class SortBasedGroupNode extends SortNode { /** - * orderingScheme may include two parts: PartitionKey and SortKey. It marks the number of + * orderingScheme may include two parts: PartitionKey and OrderKey. It marks the number of * PartitionKey. */ private int partitionKeyCount; diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/ParallelizeGrouping.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/ParallelizeGrouping.java index bb5f04350da..48207824795 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/ParallelizeGrouping.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/optimizations/ParallelizeGrouping.java @@ -120,7 +120,7 @@ public class ParallelizeGrouping implements PlanOptimizer { if (context.canSkip()) { return; } - OrderingScheme prefix = context.orderKey; + OrderingScheme prefix = context.sortKey; if (prefix.getOrderBy().size() != context.partitionKeyCount) { context.canParalleled = UNABLE; return; @@ -210,9 +210,9 @@ public class ParallelizeGrouping implements PlanOptimizer { @Override public PlanNode visitProject(ProjectNode node, Context context) { if (!context.canSkip()) { - OrderingScheme orderKey = context.orderKey; - for (int i = 0; i < orderKey.getOrderBy().size(); i++) { - if (!node.getAssignments().contains(orderKey.getOrderBy().get(i))) { + OrderingScheme sortKey = context.sortKey; + for (int i = 0; i < sortKey.getOrderBy().size(); i++) { + if (!node.getAssignments().contains(sortKey.getOrderBy().get(i))) { context.canParalleled = UNABLE; break; } @@ -224,29 +224,29 @@ public class ParallelizeGrouping implements PlanOptimizer { @Override public PlanNode visitDeviceTableScan(DeviceTableScanNode node, Context context) { if (!context.canSkip()) { - OrderingScheme orderKey = context.orderKey; + OrderingScheme sortKey = context.sortKey; Map<Symbol, ColumnSchema> tableColumnSchema = analysis.getTableColumnSchema(node.getQualifiedObjectName()); // 1. It is possible for the last sort key to be a time column - if (orderKey.getOrderBy().size() > context.partitionKeyCount + 1) { + if (sortKey.getOrderBy().size() > context.partitionKeyCount + 1) { context.canParalleled = UNABLE; return node; - } else if (orderKey.getOrderBy().size() == context.partitionKeyCount + 1) { - Symbol lastSymbol = orderKey.getOrderBy().get(context.partitionKeyCount); + } else if (sortKey.getOrderBy().size() == context.partitionKeyCount + 1) { + Symbol lastSymbol = sortKey.getOrderBy().get(context.partitionKeyCount); if (!tableColumnSchema.containsKey(lastSymbol) || tableColumnSchema.get(lastSymbol).getColumnCategory() != TIME) { context.canParalleled = UNABLE; return node; } } - // 2. check there are no field in orderKey and all tags in orderKey + // 2. check there are no field in sortKey and all tags in sortKey Set<Symbol> tagSymbols = tableColumnSchema.entrySet().stream() .filter(entry -> entry.getValue().getColumnCategory() == TAG) .map(Map.Entry::getKey) .collect(Collectors.toSet()); for (int i = 0; i < context.partitionKeyCount; i++) { - Symbol symbol = orderKey.getOrderBy().get(i); + Symbol symbol = sortKey.getOrderBy().get(i); if (!tableColumnSchema.containsKey(symbol)) { context.canParalleled = UNABLE; return node; @@ -286,17 +286,17 @@ public class ParallelizeGrouping implements PlanOptimizer { } private static class Context { - private final OrderingScheme orderKey; + private final OrderingScheme sortKey; private final int partitionKeyCount; private CanParalleled canParalleled = PENDING; - private Context(OrderingScheme orderKey, int sortKeyOffset) { - this.orderKey = orderKey; - this.partitionKeyCount = sortKeyOffset; + private Context(OrderingScheme sortKey, int partitionKeyCount) { + this.sortKey = sortKey; + this.partitionKeyCount = partitionKeyCount; } private boolean canSkip() { - return orderKey == null || canParalleled != PENDING; + return sortKey == null || canParalleled != PENDING; } }
