>From Ian Maxon <[email protected]>:
Ian Maxon has uploaded this change for review. (
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18174 )
Change subject: [ASTERIXDB-3356][RT] Add min/max cardinality to plan
......................................................................
[ASTERIXDB-3356][RT] Add min/max cardinality to plan
- user model changes: no
- storage format changes: no
- interface changes: no
Details:
- Add min and max cardinality from profile to plan
Change-Id: Ibdacf4e6b156a3b6ef15b4420f4102c122f8af1d
---
M
hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/prettyprint/LogicalOperatorPrettyPrintVisitorJson.java
1 file changed, 57 insertions(+), 13 deletions(-)
git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb
refs/changes/74/18174/1
diff --git
a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/prettyprint/LogicalOperatorPrettyPrintVisitorJson.java
b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/prettyprint/LogicalOperatorPrettyPrintVisitorJson.java
index d1a356c..36c33e6 100644
---
a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/prettyprint/LogicalOperatorPrettyPrintVisitorJson.java
+++
b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/prettyprint/LogicalOperatorPrettyPrintVisitorJson.java
@@ -228,19 +228,32 @@
}
private class OperatorProfile {
- Map<String, Pair<Double, Double>> activities;
+ Map<String, Pair<Double, Double>> activityTimes;
+ Map<String, Pair<Long, Long>> activityCards;
OperatorProfile() {
- activities = new HashMap<>();
+ activityTimes = new HashMap<>();
+ activityCards = new HashMap<>();
+ }
+
+ void updateOperator(String extendedOpId, double time, long
cardinality) {
+ updateMinMax(time, extendedOpId, activityTimes);
+ if (cardinality > 0) {
+ updateMinMax(cardinality, extendedOpId, activityCards);
+ }
}
void updateOperator(String extendedOpId, double time) {
- Pair<Double, Double> times =
activities.computeIfAbsent(extendedOpId, i -> new Pair(time, time));
- if (times.getFirst() > time) {
- times.setFirst(time);
+ updateMinMax(time, extendedOpId, activityTimes);
+ }
+
+ private <T extends Comparable<T>> void updateMinMax(T comp, String id,
Map<String, Pair<T, T>> opMap) {
+ Pair<T, T> times = opMap.computeIfAbsent(id, i -> new Pair(comp,
comp));
+ if (times.getFirst().compareTo(comp) > 0) {
+ times.setFirst(comp);
}
- if (times.getSecond() < time) {
- times.setSecond(time);
+ if (times.getSecond().compareTo(comp) < 0) {
+ times.setSecond(comp);
}
}
}
@@ -257,6 +270,11 @@
for (JsonNode counters : task.get("counters")) {
OperatorProfile info =
profiledOps.computeIfAbsent(counters.get("runtime-id").asText(),
i -> new OperatorProfile());
+ JsonNode card = counters.get("cardinality-out");
+ if (card != null) {
+
info.updateOperator(acIdFromName(counters.get("name").asText()).getLocalId(),
+ counters.get("run-time").asDouble(),
counters.get("cardinality-out").asLong(-1));
+ }
info.updateOperator(acIdFromName(counters.get("name").asText()).getLocalId(),
counters.get("run-time").asDouble());
}
@@ -343,16 +361,26 @@
jsonGenerator.writeStringField("runtime-id", od);
OperatorProfile info = profile.get(od);
if (info != null) {
- if (info.activities.size() == 1) {
- Pair<Double, Double> minMax =
info.activities.values().iterator().next();
+ if (info.activityTimes.size() == 1) {
+ Pair<Double, Double> minMax =
info.activityTimes.values().iterator().next();
jsonGenerator.writeNumberField("min-time",
minMax.first);
jsonGenerator.writeNumberField("max-time",
minMax.second);
+ if (info.activityCards.size() > 0) {
+ Pair<Long, Long> minMaxCard =
info.activityCards.values().iterator().next();
+ jsonGenerator.writeNumberField("min-cardinality",
minMaxCard.first);
+ jsonGenerator.writeNumberField("max-cardinality",
minMaxCard.second);
+ }
} else {
jsonGenerator.writeObjectFieldStart("times");
- for (Map.Entry<String, Pair<Double, Double>> ac :
info.activities.entrySet()) {
- jsonGenerator.writeObjectFieldStart(ac.getKey());
- jsonGenerator.writeNumberField("min-time",
ac.getValue().first);
- jsonGenerator.writeNumberField("max-time",
ac.getValue().second);
+ for (String acId : info.activityTimes.keySet()) {
+ jsonGenerator.writeObjectFieldStart(acId);
+ jsonGenerator.writeNumberField("min-time",
info.activityTimes.get(acId).first);
+ jsonGenerator.writeNumberField("max-time",
info.activityTimes.get(acId).second);
+ Pair<Long, Long> cards =
info.activityCards.get(acId);
+ if (cards != null) {
+
jsonGenerator.writeNumberField("min-cardinality",
info.activityCards.get(acId).first);
+
jsonGenerator.writeNumberField("max-cardinality",
info.activityCards.get(acId).second);
+ }
jsonGenerator.writeEndObject();
}
jsonGenerator.writeEndObject();
--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18174
To unsubscribe, or for help writing mail filters, visit
https://asterix-gerrit.ics.uci.edu/settings
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Change-Id: Ibdacf4e6b156a3b6ef15b4420f4102c122f8af1d
Gerrit-Change-Number: 18174
Gerrit-PatchSet: 1
Gerrit-Owner: Ian Maxon <[email protected]>
Gerrit-MessageType: newchange