You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pinot.apache.org by ro...@apache.org on 2023/07/19 15:26:51 UTC
[pinot] branch master updated: [multistage] add hint option for table node (#11114)
This is an automated email from the ASF dual-hosted git repository.
rongr pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pinot.git
The following commit(s) were added to refs/heads/master by this push:
new 9824f603f3 [multistage] add hint option for table node (#11114)
9824f603f3 is described below
commit 9824f603f353e86fed8b9de18e3a094ddd9dc5dd
Author: Rong Rong <ro...@apache.org>
AuthorDate: Wed Jul 19 08:26:45 2023 -0700
[multistage] add hint option for table node (#11114)
Co-authored-by: Rong Rong <ro...@startree.ai>
---
.../org/apache/calcite/rel/hint/PinotHintOptions.java | 6 ++++++
.../calcite/rel/hint/PinotHintStrategyTable.java | 1 +
.../query/planner/logical/RelToPlanNodeConverter.java | 2 +-
.../query/planner/plannode/AbstractPlanNode.java | 19 +++++++++++++++++++
.../pinot/query/planner/plannode/TableScanNode.java | 11 ++++++++++-
5 files changed, 37 insertions(+), 2 deletions(-)
diff --git a/pinot-query-planner/src/main/java/org/apache/calcite/rel/hint/PinotHintOptions.java b/pinot-query-planner/src/main/java/org/apache/calcite/rel/hint/PinotHintOptions.java
index eae6d4cfc8..b68f5a509d 100644
--- a/pinot-query-planner/src/main/java/org/apache/calcite/rel/hint/PinotHintOptions.java
+++ b/pinot-query-planner/src/main/java/org/apache/calcite/rel/hint/PinotHintOptions.java
@@ -28,6 +28,7 @@ package org.apache.calcite.rel.hint;
public class PinotHintOptions {
public static final String AGGREGATE_HINT_OPTIONS = "aggOptions";
public static final String JOIN_HINT_OPTIONS = "joinOptions";
+ public static final String TABLE_HINT_OPTIONS = "tableOptions";
/**
* Hint to denote that the aggregation node is the final aggregation stage which extracts the final result.
@@ -51,4 +52,9 @@ public class PinotHintOptions {
public static final String JOIN_STRATEGY = "join_strategy";
public static final String IS_COLOCATED_BY_JOIN_KEYS = "is_colocated_by_join_keys";
}
+
+ public static class TableHintOptions {
+ public static final String PARTITION_KEY = "partition_key";
+ public static final String PARTITION_SIZE = "partition_size";
+ }
}
diff --git a/pinot-query-planner/src/main/java/org/apache/calcite/rel/hint/PinotHintStrategyTable.java b/pinot-query-planner/src/main/java/org/apache/calcite/rel/hint/PinotHintStrategyTable.java
index 543d08f0bc..c1c6bb28db 100644
--- a/pinot-query-planner/src/main/java/org/apache/calcite/rel/hint/PinotHintStrategyTable.java
+++ b/pinot-query-planner/src/main/java/org/apache/calcite/rel/hint/PinotHintStrategyTable.java
@@ -36,6 +36,7 @@ public class PinotHintStrategyTable {
.hintStrategy(PinotHintOptions.INTERNAL_AGG_OPTIONS, HintPredicates.AGGREGATE)
.hintStrategy(PinotHintOptions.AGGREGATE_HINT_OPTIONS, HintPredicates.AGGREGATE)
.hintStrategy(PinotHintOptions.JOIN_HINT_OPTIONS, HintPredicates.JOIN)
+ .hintStrategy(PinotHintOptions.TABLE_HINT_OPTIONS, HintPredicates.TABLE_SCAN)
.build();
/**
diff --git a/pinot-query-planner/src/main/java/org/apache/pinot/query/planner/logical/RelToPlanNodeConverter.java b/pinot-query-planner/src/main/java/org/apache/pinot/query/planner/logical/RelToPlanNodeConverter.java
index 6b1dc25642..6ffcd6bec0 100644
--- a/pinot-query-planner/src/main/java/org/apache/pinot/query/planner/logical/RelToPlanNodeConverter.java
+++ b/pinot-query-planner/src/main/java/org/apache/pinot/query/planner/logical/RelToPlanNodeConverter.java
@@ -172,7 +172,7 @@ public final class RelToPlanNodeConverter {
String tableName = node.getTable().getQualifiedName().get(0);
List<String> columnNames =
node.getRowType().getFieldList().stream().map(RelDataTypeField::getName).collect(Collectors.toList());
- return new TableScanNode(currentStageId, toDataSchema(node.getRowType()), tableName, columnNames);
+ return new TableScanNode(currentStageId, toDataSchema(node.getRowType()), node.getHints(), tableName, columnNames);
}
private static PlanNode convertLogicalJoin(LogicalJoin node, int currentStageId) {
diff --git a/pinot-query-planner/src/main/java/org/apache/pinot/query/planner/plannode/AbstractPlanNode.java b/pinot-query-planner/src/main/java/org/apache/pinot/query/planner/plannode/AbstractPlanNode.java
index ae696ac7f9..c4349097e4 100644
--- a/pinot-query-planner/src/main/java/org/apache/pinot/query/planner/plannode/AbstractPlanNode.java
+++ b/pinot-query-planner/src/main/java/org/apache/pinot/query/planner/plannode/AbstractPlanNode.java
@@ -19,9 +19,13 @@
package org.apache.pinot.query.planner.plannode;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
+import org.apache.calcite.rel.hint.RelHint;
import org.apache.pinot.common.proto.Plan;
import org.apache.pinot.common.utils.DataSchema;
+import org.apache.pinot.query.planner.serde.ProtoProperties;
import org.apache.pinot.query.planner.serde.ProtoSerializable;
import org.apache.pinot.query.planner.serde.ProtoSerializationUtils;
@@ -81,4 +85,19 @@ public abstract class AbstractPlanNode implements PlanNode, ProtoSerializable {
public Plan.ObjectField toObjectField() {
return ProtoSerializationUtils.convertObjectToObjectField(this);
}
+
+ public static class NodeHint {
+ @ProtoProperties
+ public Map<String, Map<String, String>> _hintOptions;
+ public NodeHint() {
+ }
+
+ public NodeHint(List<RelHint> relHints) {
+ _hintOptions = new HashMap<>();
+ for (RelHint relHint : relHints) {
+ Map<String, String> kvOptions = new HashMap<>(relHint.kvOptions);
+ _hintOptions.put(relHint.hintName, kvOptions);
+ }
+ }
+ }
}
diff --git a/pinot-query-planner/src/main/java/org/apache/pinot/query/planner/plannode/TableScanNode.java b/pinot-query-planner/src/main/java/org/apache/pinot/query/planner/plannode/TableScanNode.java
index a9c92ca387..070e09d209 100644
--- a/pinot-query-planner/src/main/java/org/apache/pinot/query/planner/plannode/TableScanNode.java
+++ b/pinot-query-planner/src/main/java/org/apache/pinot/query/planner/plannode/TableScanNode.java
@@ -19,11 +19,14 @@
package org.apache.pinot.query.planner.plannode;
import java.util.List;
+import org.apache.calcite.rel.hint.RelHint;
import org.apache.pinot.common.utils.DataSchema;
import org.apache.pinot.query.planner.serde.ProtoProperties;
public class TableScanNode extends AbstractPlanNode {
+ @ProtoProperties
+ private NodeHint _nodeHint;
@ProtoProperties
private String _tableName;
@ProtoProperties
@@ -33,9 +36,11 @@ public class TableScanNode extends AbstractPlanNode {
super(planFragmentId);
}
- public TableScanNode(int planFragmentId, DataSchema dataSchema, String tableName, List<String> tableScanColumns) {
+ public TableScanNode(int planFragmentId, DataSchema dataSchema, List<RelHint> relHints, String tableName,
+ List<String> tableScanColumns) {
super(planFragmentId, dataSchema);
_tableName = tableName;
+ _nodeHint = new NodeHint(relHints);
_tableScanColumns = tableScanColumns;
}
@@ -47,6 +52,10 @@ public class TableScanNode extends AbstractPlanNode {
return _tableScanColumns;
}
+ public NodeHint getNodeHint() {
+ return _nodeHint;
+ }
+
@Override
public String explain() {
return "TABLE SCAN (" + _tableName + ")";
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@pinot.apache.org
For additional commands, e-mail: commits-help@pinot.apache.org