It sounds as if your requirements go beyond CALCITE-481. If so, please log a 
JIRA case.

> On Oct 10, 2016, at 8:52 AM, Chinmay Kolhatkar <chin...@apache.org> wrote:
> 
> Thanks Julian. I think CALCITE-481 would be a good improvement.
> 
> On Wed, Oct 5, 2016 at 11:02 PM, Julian Hyde <jhyde.apa...@gmail.com 
> <mailto:jhyde.apa...@gmail.com>> wrote:
> 
>> What you are asking for is not currently possible but would be a very
>> interesting, useful and powerful extension to Calcite. And in my opinion it
>> fits well with the way with the way that Volcano/Cascades optimizers work.
>> The idea would be for the optimizer to work on a forest (a set of trees
>> with different roots, but shared leaves).
>> 
>> It is related to https://issues.apache.org/jira/browse/CALCITE-481, which
>> deals with trees that have a single root but store intermediate results so
>> that they can be used more than once. I surmise that you are also very
>> interested in maximizing the commonality between trees.
>> 
>> The trickiest part is to get the cost model right. You need to account for
>> a cost each time the work is done, not each time the result is used. Jesus
>> researched this
>> very topic, using integer linear programming (ILP) to incorporate these
>> considerations into the cost model.
>> 
>> Can you please create a JIRA case for it? Maybe Jesus can add some
>> comments there.
>> 
>> It is also related to Hive multi-table queries [1]. I have not seen a SQL
>> syntax for multi-output queries. Maybe we can devise one. Or does someone
>> know of one?
>> 
>> And it presents challenges/opportunities for engines. Some engines can
>> push to multiple consumers, or equivalently create a stream of tuples that
>> can be read by multiple consumers, others can only persist an intermediate
>> result that can be read by multiple consumers. Spark had their own version
>> of this discussion when implementing multitable in Hive-Spark[2].
>> 
>> Julian
>> 
>> [1] https://cwiki.apache.org/confluence/display/Hive/
>> GettingStarted#GettingStarted-MULTITABLEINSERT <https://cwiki.apache.org/ 
>> <https://cwiki.apache.org/>
>> confluence/display/Hive/GettingStarted#GettingStarted-MULTITABLEINSERT>
>> 
>> [2] https://issues.apache.org/jira/browse/SPARK-3622 
>> <https://issues.apache.org/jira/browse/SPARK-3622> <
>> https://issues.apache.org/jira/browse/SPARK-3622>
>> 
>>> On Oct 4, 2016, at 9:23 AM, Chinmay Kolhatkar <chin...@datatorrent.com>
>> wrote:
>>> 
>>> Dear Community,
>>> 
>>> I'm working on integration with Apache Apex and Apache Calcite
>> (underlying
>>> Apache Jira is: APEXMALHAR-1818).
>>> 
>>> I have a question related to conversion from SQL to RelNode Tree.
>>> 
>>> Is it possible that VolcanoPlanner can take multiple SQL statements as
>>> input and return a unified RelNode Tree?
>>> Example of above is as follows:
>>> 
>>> SELECT COL1, COL2 FROM TABLE WHERE COL3 > 10;
>>> SELECT COL1, COL2 FROM TABLE WHERE COL4  = 'abc';
>>> 
>>> Above 2 statements has a common path and hence can provide an unified
>>> RelNode tree as follows:
>>> 
>>> [Scan] -> [Project (COL1, COL2)] -> [Filter (COL4 = 'abc')] -> [Delta]
>>>                   |
>>>                   V
>>>           [Filter (COL3 > 10)]
>>>                   |
>>>                   v
>>>                [Delta]
>>> 
>>> 
>>> Thanks,
>>> Chinmay.

Reply via email to