You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@calcite.apache.org by Michael Franzkowiak <mi...@contiamo.com> on 2016/05/18 13:16:06 UTC

Specifying a table of a subschema in RelBuilder

Hi all,

we have a (very basic) custom query DSL for OLAP type queries and are investigating whether we can replace and improve on our current execution engine using calcite.

We believe using the RelBuilder would be a much nicer way to go from our custom query format to actual DB queries (while offering many potential benefits - planning process etc. - in the future).

That said, we’ve run into a small issue: the “scan” method only accepts a String as a table identifier, meaning that we can’t specify a table of a sub schema (“db1”.”my_table”). Since RelOptSchema.getTableForMember accepts a list of Strings for this case we’re wondering whether 

a) there is a reason for only accepting a String (there is a comment in RelOptSchema.getTableForMember stating that “names.length is only greater than 1 for queries originating from JDBC”)

b) scan could be overloaded to accept a List of Strings as well (in which case we’re happy to make that change)

Cheers,
Michael

Re: Specifying a table of a subschema in RelBuilder

Posted by Julian Hyde <jh...@apache.org>.
Good idea. Change “scan(String tableName)" to “scan(String… tableNames)”, and also add “scan(Iterable<String> tableNames)” for people who happen to have lists, not arrays.

Note that the list may be fully-qualified but doesn’t have to be. It could be a table within the current database + schema, or schema.table within the current database.

I believe that RelOptSchema.getTableForMember will do that.

The comment “names.length is only greater than 1 for queries originating from JDBC” relates to the time when Calcite was called Saffron[1] and could find queries in Java-like expressions (similar to LINQ). “Only … from JDBC” means as opposed to queries that had been parsed out of Java code. 

Julian

[1] http://saffron.sourceforge.net/overview.html <http://saffron.sourceforge.net/overview.html>


> On May 18, 2016, at 6:16 AM, Michael Franzkowiak <mi...@contiamo.com> wrote:
> 
> Hi all,
> 
> we have a (very basic) custom query DSL for OLAP type queries and are investigating whether we can replace and improve on our current execution engine using calcite.
> 
> We believe using the RelBuilder would be a much nicer way to go from our custom query format to actual DB queries (while offering many potential benefits - planning process etc. - in the future).
> 
> That said, we’ve run into a small issue: the “scan” method only accepts a String as a table identifier, meaning that we can’t specify a table of a sub schema (“db1”.”my_table”). Since RelOptSchema.getTableForMember accepts a list of Strings for this case we’re wondering whether 
> 
> a) there is a reason for only accepting a String (there is a comment in RelOptSchema.getTableForMember stating that “names.length is only greater than 1 for queries originating from JDBC”)
> 
> b) scan could be overloaded to accept a List of Strings as well (in which case we’re happy to make that change)
> 
> Cheers,
> Michael