Thanks, Michael. I was distracted by other stuffs. Will send a PR soon. On Tue, Aug 23, 2016 at 2:32 PM, Michael Mior <[email protected]> wrote:
> Shuyi, > > Just wanted to check in and see how things were going in terms of putting > together a PR with this. Let me know if there's any way I can help! > > Cheers, > -- > Michael Mior > [email protected] > > 2016-08-04 3:33 GMT-04:00 Shuyi Chen <[email protected]>: > > > Thanks a lot, Michael and Jordan. I got it working with the suggestion. > > I'll send a pull request later for you guys to help review. > > > > Also, I got another question. When I run a PrepareStatement in calcite, I > > also want to push down part of the PrepareStatement in CQL to cassandra. > > For example, > > > > Assuming the cassandra table contains field: a, b, c, and a is the only > > primary key. > > > > calcite PrepareStatement is: select a, b, c from table1 where a = ? and > b > > < ?; > > > > I want to push down CQL PrepareStatement: select a, b, c from table1 > where > > a = ? to cassandra, and store the cassandra PrepareStatement inside the > > calcite PrepareStatement. > > > > And when we bind the data to execute the calcite PrepareStatement, I need > > to be able to retrieve the stored cassandra PrepareStatement and bind the > > data for it to execute the cassandra query. > > > > I would love to get some advice on how to implement this. Thanks a lot. > > > > > > > > > > On Wed, Aug 3, 2016 at 1:22 PM, [email protected] < > > [email protected]> wrote: > > > > > Sure, I'm no Cassandra expert and obviously the implementation needs to > > > handle whatever actually can be pushed down to C*. One should not > follow > > my > > > advice precisely. The methods that are required to determine whether a > > > predicate is supported are already present in CassandraFilterRule. I > was > > > just commenting on how one would go about splitting a filter based on > > what > > > is supported/not supported. So, replace "equality predicate" with > > "whatever > > > Cassandra supports" and use the existing isEqualityOnKey method. > > > > > > > On Aug 3, 2016, at 11:44 AM, Michael Mior <[email protected]> > wrote: > > > > > > > > It's more complicated than that. For equality predicates, it's a > matter > > > of > > > > splitting out equality predicates involving a field and a literal. > > > > Cassandra can't handle predicates involving expressions or equality > > > between > > > > fields. Cassandra can also handle some range predicates if the > > partition > > > > key is already restricted by an equality predicate and the range > > > predicate > > > > is part o the clustering key. > > > > > > > > Cheers, > > > > -- > > > > Michael Mior > > > > [email protected] > > > > > > > > 2016-08-03 14:21 GMT-04:00 [email protected] < > > > > [email protected]>: > > > > > > > >> It's just a matter of splitting out equality predicates. What I > would > > do > > > >> is create a Filter rule that splits the filter based on whether a > > > predicate > > > >> is an equality. If the Filter is split, the rule returns a Filter > with > > > the > > > >> equality predicates as inputs to the non-equality predicates. That > > > should > > > >> allow the CassandraFilterRule to convert the Filter with equality > > > >> predicates and for the rest of the predicates above to be > implemented > > in > > > >> Enumerable convention. > > > >> > > > >> You can look at the rules in core for some examples of splitting > > > >> expressions. Just ensure equality predicates are pushed down or you > > can > > > >> implement a rule for pushing them down past other filters. > > > >> > > > >>> On Aug 3, 2016, at 10:57 AM, Shuyi Chen <[email protected]> > wrote: > > > >>> > > > >>> Hi, > > > >>> > > > >>> I am working on improving the cassandra adapter. Right now, I found > > > that > > > >> if > > > >>> my filter contains non-primary keys, calcite will just reject the > > > filter > > > >>> and just execute a no-filter cql query which is bad. I am > wondering > > > how > > > >> I > > > >>> can split the filter into cassandra supported part and > > > >>> cassandra-non-supported part, and push down the cassandra supported > > > part > > > >> to > > > >>> cql. Below is an example. > > > >>> > > > >>> Assuming the cassandra table contains field: a, b, c, and a is the > > only > > > >>> primary key. > > > >>> > > > >>> calcite sql is: select a, b, c from table1 where a = 'xxx' and b < > > > 3223; > > > >>> > > > >>> I want to push down cql: select a, b, c from table1 where a = 'xxx' > > to > > > >>> cassandra, > > > >>> > > > >>> But right now, the cassandra adapter will only push down: select a, > > b, > > > c > > > >>> from table1, which is bad for cassandra. > > > >>> > > > >>> Thanks a lot. > > > >>> Shuyi > > > >>> > > > >>> -- > > > >>> "So you have to trust that the dots will somehow connect in your > > > future." > > > >> > > > > > > > > > > > -- > > "So you have to trust that the dots will somehow connect in your future." > > > -- "So you have to trust that the dots will somehow connect in your future."
