Druid uses Calcite for SQL parsing and planning. The code is all in https://github.com/druid-io/druid/tree/master/sql/src/main/java/io/druid/sql if you want to take a look. The user-facing docs are at http://druid.io/docs/latest/querying/sql.html if you want to see how users interact with it.
The "PlannerFactory" at https://github.com/druid-io/druid/blob/master/sql/src/main/java/io/druid/sql/calcite/planner/PlannerFactory.java is the part that sets up the Calcite stuff and the "DruidPlanner" at https://github.com/druid-io/druid/blob/master/sql/src/main/java/io/druid/sql/calcite/planner/DruidPlanner.java is the part that calls into it. There's also "DruidMeta" at https://github.com/druid-io/druid/blob/master/sql/src/main/java/io/druid/sql/avatica/DruidMeta.java which sets up an Avatica based JDBC server. Gian On Tue, Sep 26, 2017 at 8:35 AM, Enrico Olivelli <eolive...@gmail.com> wrote: > Thank you for your Quick response Michael. > I will try to follow your suggestions > I will be back soon with my results > > There is another API Frameworks.getPlanner() which does something similar > Planner planner = Frameworks.getPlanner(config); > SqlNode parsed = planner.parse("SELECT * FROM MYTABLE"); > RelRoot rel = planner.rel(parsed); > > > I will have to deal with: > - schema changes > - caching plans > - multiple schemas > - indexes/costs based planer > > Do you (or any one else) have some links to test cases or other usages of > Calcite as planner ? > > Cheers > -- Enrico > > > > 2017-09-26 17:27 GMT+02:00 Michael Mior <mm...@uwaterloo.ca>: > > > That's definitely possible and is definitely the kind of use case Calcite > > is designed for. In terms of Calcite APIs, the approach would be > something > > like the following: > > > > Use SqlParser to get a SqlNode representing the query > > Implement CatalogReader to provide access to the schema > > Convert the SqlNode to a RelNode (relational algebra expression) using > > SqlToRelConverter > > Construct a RelOptPlanner instance and set the root of your planner to > the > > RelNode from your query > > Call findBestExp on the planner and then walk the generated expression > tree > > to generate a HerdDB plan > > > > This can hopefully get you pointed in the right direction. Personally, > I'm > > not sure how you would best incorporate the use of indexes, but I'm sure > > someone else will be able to chime in. > > > > Cheers, > > -- > > Michael Mior > > mm...@apache.org > > > > 2017-09-26 10:36 GMT-04:00 Enrico Olivelli <eolive...@gmail.com>: > > > > > Hi, > > > I would like to use Calcite as SQLPlanner in my open source project > > HerdDB > > > https://github.com/diennea/herddb > > > > > > HerdDB is a distributed database built in Java, it is essentially a > > > distributed key-value store but is has an SQL layer which is the > > entrypoint > > > for JDBC clients. > > > > > > Currently we have a very simple SQLPlanner, that is a component which > > maps > > > SQL language to an internal AST which represents the access plan to > data. > > > > > > I heard about Calcite and as far as I can see it would be easy to > > integrate > > > Calcite as SQL Planner. > > > > > > > > > I am expecting to have something like this: > > > 1) Give to Calcite an SQL query + Current schema + available > indexes.... > > > 2) Calcite which creates a access plan using Calcite AST > > > 3) Convert Calcite AST to HerdDB access plan AST > > > > > > I am not looking at something on the client-side I would like to use > > > Calcite on the server > > > is is possible ? > > > > > > Thank you in advance > > > > > > Enrico Olivelli > > > eolive...@apache.org > > > > > >