Use collations, which are a kind of metadata:

  RelNode r;
  RelMetadataQuery mq = RelMetadataQuery.instance();
  List<RelCollation> collations = mq.collations(r);

This example creates a RelMetadataQuery instance, but a RelMetadataQuery 
instance is expensive to create, and contains data structures that cache 
intermediate results and prevent cycles.  So, if you already have a 
RelMetadataQuery instance (e.g. if you are implementing a metadata method) then 
use it rather than creating a new one.

There are lots of other kinds of metadata, including lots of statistics. The 
methods on RelMetadataQuery[1] give you an idea of the built-in metadata, and 
you can also add your own metadata types.

Two things make “collations” of streams more complex:

1. It is the validator that determines whether a SQL query is valid. It works 
on the SqlNode tree, and information available from the catalog, before the 
first RelNode is created. The implication of this is that the monotonicity 
available to the validator is different (though hopefully not too different).

2. At present, we validate based on “is sorted”. In future, to deal with the 
variety of streaming systems, and even hybrid problems like continuous ETL, we 
will want to validate based on “could be sorted”. For example, if your orderId 
is allocated from parallel sequence generators that are never more than 5 
minutes apart, then someone could say “group by floor(orderId / 1000)” if they 
are prepared for their query to have a 5 minute latency.

These areas both need some work over the next months.

Julian

[1] 
https://calcite.apache.org/apidocs/org/apache/calcite/rel/metadata/RelMetadataQuery.html
 
<https://calcite.apache.org/apidocs/org/apache/calcite/rel/metadata/RelMetadataQuery.html>

> On Nov 23, 2016, at 4:04 AM, Chinmay Kolhatkar <[email protected]> wrote:
> 
> Dear Community,
> 
> I'm trying to add support for GROUP BY clause in Apache Apex-Calcite
> integration.
> 
> I am assuming that calcite knows which is the monotonic column because
> query fails to parse if there is no monotonic column present in group set.
> 
> Is there any way to find out which is the monotonic column in the GROUP BY
> clause from Aggregate/LogicalAggregate object?
> 
> Thanks,
> Chinmay.

Reply via email to