Rajat,

I’ll second what Maryann says. Please chime in on 
https://issues.apache.org/jira/browse/CALCITE-1101 
<https://issues.apache.org/jira/browse/CALCITE-1101>. If it doesn’t make things 
easier for Quark we probably shouldn’t be doing it.

Julian

> On Feb 26, 2016, at 8:39 AM, Maryann Xue <maryann....@gmail.com> wrote:
> 
> Thank you for pointing out another way of defining materializations, Rajat!
> 
> We had some discussion again about this interface, and Julian opened a JIRA
> https://issues.apache.org/jira/browse/CALCITE-1101.
> 
> The main problems are:
> 
> 1. The life cycle of the materializations. In Phoenix (we don't know about
> other projects, so welcome more comments), materializations are used to
> model secondary indices, which are in fact another type of Phoenix tables.
> So materializations for Phoenix should have exactly the same life cycle as
> its enclosed PhoenixSchema, which is a snapshot of all current table
> definitions as of the timestamp for a specific JDBC statement.
> 
> 2. Right now for calling defineMaterialization method, we need to take a
> whole lot of trouble to get the CalciteSchema object which in fact should
> be internal to Calcite code.
> 
> 3. The right point of time for defining/creating those materialized views.
> Whether for Quark or Phoenix, we need to make sure that we call
> defineMaterialization at the exact right point of time, which is after the
> schema is loaded and before the planner tries to collect and use them.
> Again this had better be something taken care of by Calcite instead of
> carefully maintained by the users.
> 
> 
> Let's follow up on that JIRA though.
> 
> 
> 
> Thanks,
> Maryann
> 
> On Fri, Feb 26, 2016 at 5:50 AM, Rajat Venkatesh <rvenkat...@qubole.com>
> wrote:
> 
>> In Quark, dont use hooks to define materializations. We use a tablefactory
>> [1] to defer until the schema is loaded[2].
>> 
>> 1.
>> 
>> https://github.com/qubole/quark/blob/master/optimizer/src/main/java/com/qubole/quark/planner/MetadataSchema.java#L85
>> 2.
>> 
>> https://github.com/apache/calcite/blob/master/core/src/main/java/org/apache/calcite/materialize/MaterializationService.java#L132
>> 
>> Hopefully, I've understood your problem correctly.
>> 
>> 
>> On Thu, Feb 25, 2016 at 10:16 PM Maryann Xue <maryann....@gmail.com>
>> wrote:
>> 
>>> Hi Michael,
>>> 
>>> We had a little difficulty defining our secondary indices as materialized
>>> views with our Schema SPI implementation too, and this made the code
>> pretty
>>> hacky. In order to call that defineMaterialization method, we hold the
>>> parent SchemaPlus object within our own Schema impl object so that we can
>>> get its own corresponding SchemaPlus object by calling "parentSchema
>>> .getSubSchema(this.name)" later on. We do this after the schema/table
>>> resolving phase (that is when the entire schema tree incl. your own
>> schema
>>> objects have been initiated) and call defineMaterialization for each
>>> secondary index under each subSchema. We add a hook in "Hook.TRIMMED" for
>>> this, which sounds pretty weird, but this is exactly a point after you
>> have
>>> the whole schema tree ready and before the materializations are asked for
>>> by the planner.
>>> 
>>> Anyway, I do hope the interface can be modified to avoid all this
>> trouble.
>>> 
>>> 
>>> Thanks,
>>> Maryann
>>> 
>>> On Thu, Feb 25, 2016 at 9:24 AM, Michael Mior <mm...@uwaterloo.ca>
>> wrote:
>>> 
>>>> Any suggestions on the best place to hook in and add the materialized
>>>> views? It seems like doing so requires the SchemaPlus object
>>> corresponding
>>>> to the current schema. The current best approach I see is to save a
>>>> reference to the parent schema and then pull out the appropriate
>>> SchemaPlus
>>>> object in getTableMap. This seems like a bit of a hack though.
>>>> 
>>>> --
>>>> Michael Mior
>>>> mm...@uwaterloo.ca
>>>> 
>>>> 2016-02-24 17:22 GMT-05:00 Julian Hyde <jh...@apache.org>:
>>>> 
>>>>> By the way, interesting that you are interested in Cassandra and
>>>>> materialized views. Cassandra announced materialized view support
>>>>> recently[1] but they solved only half of a problem (not an
>>>>> insignificant half, I hasten to add), namely materialized view
>>>>> maintenance. They don't transparently substitute them into the query
>> -
>>>>> you have to reference the materialized view explicitly in y our query
>>>>> - so in my book they've not delivered materialized view support. If
>>>>> you're planning to deliver REAL materialized view support to
>> Cassandra
>>>>> that would be awesome.
>>>>> 
>>>>> Julian
>>>>> 
>>>>> [1]
>>>>> 
>>> http://www.datastax.com/dev/blog/new-in-cassandra-3-0-materialized-views
>>>>> 
>>>>> 
>>>>> On Wed, Feb 24, 2016 at 2:17 PM, Julian Hyde <jh...@apache.org>
>> wrote:
>>>>>> As is typical for complex pieces of code like this, the
>> documentation
>>>>>> is in the code (and the unit test). It's probably not what you
>> wanted
>>>>>> to hear, but the code mutates quite fast and so if we'd written a
>>>>>> design doc a few months ago it would be partially inaccurate.
>>>>>> 
>>>>>> I, Maryann Xue and Amogh Margoor are the main authors of this code.
>>>>>> 
>>>>>> Suggest you find a relevant test case in MaterializationTest (or
>>> write
>>>>>> a new one) and run it with trace enabled and/or in a debugger. You
>>>>>> will see the process of matching an expression to a MV bottom up if
>>>>>> you watch each call to UnifyRule.unify.
>>>>>> 
>>>>>> Julian
>>>>>> 
>>>>>> 
>>>>>> On Wed, Feb 24, 2016 at 1:40 PM, Michael Mior <mm...@uwaterloo.ca>
>>>>> wrote:
>>>>>>> Is there any documentation anywhere on how the current
>>> implementation
>>>> of
>>>>>>> query rewriting for materialized views work? Mostly I'm referring
>>>>>>> to MaterializedViewSubstitutionVisitor. There's a lot of code to
>>>> digest
>>>>>>> with not a lot of documentation and it would be helpful to have a
>>>>> reference
>>>>>>> to refer. Thanks!
>>>>>>> 
>>>>>>> Cheers,
>>>>>>> --
>>>>>>> Michael Mior
>>>>>>> mm...@uwaterloo.ca
>>>>> 
>>>> 
>>> 
>> 

Reply via email to