[teiid-issues] [JBoss JIRA] (TEIID-5682) Raise aggregation to allow for join pushdown
Steven Hawkins (Jira)
issues at jboss.org
Mon Apr 1 13:58:00 EDT 2019
[ https://issues.jboss.org/browse/TEIID-5682?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Steven Hawkins resolved TEIID-5682.
-----------------------------------
Fix Version/s: (was: 12.2)
Resolution: Deferred
Adding this into the optimizer seems too special purpose. A sketch of what this looks like in RuleRaiseAccess when you can't raise over a grouping:
{code}
//perform the pullup of aggregation if necessary
PlanNode source = NodeEditor.findParent(accessNode, NodeConstants.Types.SOURCE, NodeConstants.Types.JOIN);
if (source == null) {
return null;
}
//intervening nodes ...
//project node must be simple
PlanNode join = source.getParent();
if (join == null || join.getType() != NodeConstants.Types.JOIN) {
return null;
}
JoinType type = (JoinType) join.getProperty(NodeConstants.Info.JOIN_TYPE);
//what about correlated references / lateral join
boolean left = join.getFirstChild() == source;
PlanNode other = left?join.getLastChild():join.getFirstChild();
if (other.getType() != NodeConstants.Types.ACCESS) {
return null;
}
List<Criteria> criteria = (List<Criteria>) join.getProperty(NodeConstants.Info.JOIN_CRITERIA);
if (canRaiseOverJoin(
Arrays.asList(left ? accessNode : other, left ? other : accessNode),
metadata, capFinder,
criteria,
type, record, context, false, false) == null) {
return null;
}
// on can't be on the aggregates
for (Criteria crit : criteria) {
//look at the symbol map to find aggregates, check against the symbols here
//...
}
//the other select columns must be sortable
{code}
Altering the expand logic sql generation is possible - but adds a lot of additional logic and is only valid for a single expand.
So I'm marking as deferred.
Instead I've added a makeind hint to the outer side. For sources that don't support array_agg this ensures a relatively bounded set is used to perform the join. A potential refinement is to look for the inner cardinality and not use the hint if it is "small".
> Raise aggregation to allow for join pushdown
> --------------------------------------------
>
> Key: TEIID-5682
> URL: https://issues.jboss.org/browse/TEIID-5682
> Project: Teiid
> Issue Type: Enhancement
> Components: Query Engine
> Reporter: Steven Hawkins
> Assignee: Steven Hawkins
> Priority: Major
>
> In some plans, for example those created by odata expand see TEIID-5680, the resulting query has the form of:
> select tbl1-cols from tbl1 left outer join (select cols, aggregates ... from tbl2 group by cols) on (some non-aggregate predicate)
> If the aggregates or other intervening constructs are not able to be pushed the result will be a federated join.
> In most instances (where the tbl1 columns are sortable) it's possible to change this to:
> select tbl1-cols aggregates from tbl1 left outer join tbl1 on (...) group by tbl1-cols, cols
> which can allow the pushdown of the join to proceed.
--
This message was sent by Atlassian Jira
(v7.12.1#712002)
More information about the teiid-issues
mailing list