Sure, we can make sure something gets into 1.22. There is consensus about the 
parser extensions, whereas the extensions to RelNode and the planner engine are 
a little more experimental. So let’s go forward with that, stating which parts 
we think are likely to change.

Julian


> On Oct 29, 2019, at 2:09 AM, Seliverstov Igor <gvvinbl...@gmail.com> wrote:
> 
> Colleagues,
> 
> Not only Hazelcast and Apache Flink are interested in SQL hints. Apache 
> Ignite community is working on Calcite integration too, it’s important for us 
> to have appropriate API at current development stage. This case we’ll be able 
> to adapt our solution for SQL hints usage, probably determining additional 
> approach weaknesses or inconveniences.
> 
> Regards,
> Igor
> 
>> 29 окт. 2019 г., в 11:51, Danny Chan <yuzhao....@gmail.com> написал(а):
>> 
>> Julian, can we make  some effort to push this feature into release 1.22, 
>> there are users like Vladimir Ozerov from Hazelcast that are interesting on 
>> this feature, also the Apache Flink.
>> 
>> I agree that this internal design is not that perfect, at this moment, we 
>> may hardly to conclude a perfect solution, but at least, the syntax would 
>> remain unchanged in the future.
>> 
>> So can we mark this feature as experimental and we can promote the internal 
>> design when accept more feedbacks from the Calcite uses (from Apache Flink 
>> or from users like Vladimir).
>> 
>> Best,
>> Danny Chan
>> 在 2019年10月18日 +0800 AM4:55,Julian Hyde <jh...@apache.org>,写道:
>>> I wonder whether it is possible to add some kind of “action handler” to the 
>>> planner engine, called, for example, when a rule has fired and is 
>>> registering the RelNode created by the rule. People can write their own 
>>> action handlers to copy hints around. Since the action handlers are the 
>>> user’s code, they can iterate faster to find a hint-propagation strategy 
>>> that works in practice.
>>> 
>>> Another idea is to use VolcanoPlanner.Provenance[1]. A RelNode can find its 
>>> ancestor RelNodes, and the rules that fired to create it. So it can grab 
>>> hints from those ancestors. It does not need to copy those hints onto 
>>> itself.
>>> 
>>> Julian
>>> 
>>> [1] 
>>> https://calcite.apache.org/apidocs/org/apache/calcite/plan/volcano/VolcanoPlanner.Provenance.html
>>>  
>>> <https://calcite.apache.org/apidocs/org/apache/calcite/plan/volcano/VolcanoPlanner.Provenance.html>
>>> 
>>>> On Oct 16, 2019, at 8:38 PM, Haisheng Yuan <h.y...@alibaba-inc.com> wrote:
>>>> 
>>>> Julian,
>>>> Your concern is very valid, and that is also our main concern.
>>>> I was thinking whether we can put hint into the MEMO group, so that both 
>>>> logical and physical expression in the same group can share the same hint, 
>>>> without copying the hint explicitly. But for newly generated expression 
>>>> that doesn't belong to the original group, we still need to copy hints. 
>>>> What's worse, in HepPlanner, there is no such concept, we may still need 
>>>> to copy hints explicity in planner rules, if we want to keep the hint, 
>>>> which is burdensome.
>>>> 
>>>> - Haisheng
>>>> 
>>>> ------------------------------------------------------------------
>>>> 发件人:Danny Chan<yuzhao....@gmail.com>
>>>> 日 期:2019年10月16日 14:54:46
>>>> 收件人:<dev@calcite.apache.org>
>>>> 主 题:Re: [DISCUSS] Support Sql Hint for Calcite
>>>> 
>>>> Thanks for the clarification.
>>>> 
>>>> I understand you worried. Yes, the effort/memory would be wasted or 
>>>> meaningless if hints are not used. This is just what a hint does, it is a 
>>>> “hint” and non-mandatory, but we should give the chance to let user see 
>>>> them, it is the use that decide if to use the hints and how to use them. 
>>>> For big queries I have no confidence to cover the corner cases. So can we 
>>>> mark this feature as experimental and used for simple queries(no 
>>>> decorrelation) first ?
>>>> 
>>>> For “reversible”, during the implementation, I try to make the 
>>>> modifications non-invasive with the current codes. That is why I made all 
>>>> the interfaces about the hint into one class named RelWithHInt. Different 
>>>> with trait, I didn’t force users to pass in the hints in the RelNode 
>>>> constructor. I think if is not a bigwork if we want to remove the API.
>>>> 
>>>> Best,
>>>> Danny Chan
>>>> 在 2019年10月16日 +0800 AM11:14,Julian Hyde <jh...@apache.org>,写道:
>>>>> By “skeptical” I mean that I think we can come up with a mechanism to 
>>>>> copy hints when applying planner rules, but even when we have implemented 
>>>>> that mechanism there will be many cases where people want a hint and that 
>>>>> hint is not copied to the RelNode where it is needed, and many other 
>>>>> cases where we spend the effort/memory of copying the hint to a RelNode 
>>>>> and the hint is not used.
>>>>> 
>>>>> By “reversible” I mean if we come up with an API that does not work, how 
>>>>> do we change or remove that API without people complaining?
>>>>> 
>>>>> Julian
>>>>> 
>>>>> 
>>>>>> On Oct 15, 2019, at 7:11 PM, Danny Chan <yuzhao....@gmail.com> wrote:
>>>>>> 
>>>>>> Thanks Julian
>>>>>> 
>>>>>>> I am skeptical that RelWithHint will work for large queries.
>>>>>> 
>>>>>> For “skeptical” do you mean how to transfer the hints during rule 
>>>>>> planning ? I’m also not that confident yet.
>>>>>> 
>>>>>>> How do we introduce it in a reversible way
>>>>>> Do you mean transform the RelWithHint back into the SqlHint ? I didn’t 
>>>>>> implement it in current patch, but I think we have the ability to do 
>>>>>> that because we have a inheritPath for each RelWithHint, we can collect 
>>>>>> all the hints together and merge them into the SqlHints, then propagate 
>>>>>> these SqlHints to the SqlNodes.
>>>>>> 
>>>>>>> What are the other options?
>>>>>> Do you mean the way to transfer hints during planning ? I have no other 
>>>>>> options yet.
>>>>>> 
>>>>>> Best,
>>>>>> Danny Chan
>>>>>> 在 2019年10月16日 +0800 AM8:03,dev@calcite.apache.org,写道:
>>>>>>> 
>>>>>>> I am skeptical that RelWithHint will work for large queries.
>>>>> 
>>>> 
>>> 
> 

Reply via email to