[ 
https://issues.apache.org/jira/browse/CALCITE-3896?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17077812#comment-17077812
 ] 

Jinpeng Wu commented on CALCITE-3896:
-------------------------------------

Hi, [~hyuan] . Looks like some useful change. Are you intending to use this to 
replace AC?  I think we need to consider several cases before this:

1.  How can the planner know that passing request [a] to MergeJoin[a,b] will 
generate exactly the same MergeJoin[a]  in order to avoid redundancy. Enforcing 
needs only generate an output that satisfies [a], not exactly [a].  Or it could 
be another MergeJoin[a] with different inputs, thus different cost.

2. What if the implementation rule generating MergeJoin[a] comes after 
passThrough [a] to MergeJoin[a,b] 

3. The method passThough could generate more than multiple candidates or none 
candidates

 

> Pass through parent trait requests to child operators
> -----------------------------------------------------
>
>                 Key: CALCITE-3896
>                 URL: https://issues.apache.org/jira/browse/CALCITE-3896
>             Project: Calcite
>          Issue Type: Improvement
>          Components: core
>            Reporter: Haisheng Yuan
>            Priority: Major
>
> This is not on-demand trait requests as described in [mailing 
> list|http://mail-archives.apache.org/mod_mbox/calcite-dev/201910.mbox/%3cd75b20f4-542a-4a73-897e-66ab426494c1.h.y...@alibaba-inc.com%3e],
>  which requires the overhaul of the core planner. This ticket tries to enable 
> VolcanoPlanner with basic and minimal ability to pass through parent trait 
> request to child operators without rules, though may not be flexible or 
> powerful, but should be able to work with current Calcite application with 
> minimal changes.
> The method for physical operators to implement would be:
> {code:java}
> interface RelNode {
>   RelNode passThrough(RelTraitSet required);
> }
> {code}
> Given that Calcite's physical operators decides its child operators' traits 
> when the physical operator is created in physical implementation rule, there 
> are some drawback that can't be avoided. e.g., given the following plan:
> {code:java}
> StreamAgg on [a]
>    +-- MergeJoin on [a, b, c]
>                |--- TableScan foo
>                +--- TableScan bar
> {code}
> Suppose the MergeJoin implementation rule generates several mergejoins that 
> distributes by [a], [a,b], [a,b,c] separately. Then we pass parent operator 
> StreamAgg's trait request to MergeJoin. Since MergeJoin[a] satisfies parent's 
> request, nothing to do. Next pass request to MergeJoin[a,b], we get 
> MergeJoin[a], then pass request to MergeJoin[a,b,c], we get MergeJoin[a] 
> again. We know they are redundant and there is no need to pass through parent 
> operator's trait request, but these MergeJoin operators are independent and 
> agnostic of each other's existence.
> The ideal way is that in physical implementation rule, during the creation of 
> physical operator, it should not care about itself and its child operators' 
> physical traits. But this is another different topic.
> Anyway, better than nothing, once it is done, we can provide the option to 
> obsolete or disable  {{AbstractConverter}}, but still be able to do property 
> enforcement. 



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to