HI Benchao, Thank you very much for your excellent suggestions! I believe that I have a better understanding about my problem now. I saw the pushdowns and also the usage of multiple conventions in the same plan, and was able to implement and play around with the same.
I went through talk [4] as well. So my question is better phrased as: "Is there a planner rule that converts a join on 2 Table scans to some kind of table?" Are any examples available on this? I tried looking for examples on the same, however; I was able to observe pushdowns, but not what I just mentioned. This is similar to the ProjectTableScan rule in some sense, it converts a project on a TableScan to a ProjectableFilterableTable SCAN. Thanks & Regards, Pranav On Fri, Aug 5, 2022 at 11:57 PM Benchao Li <libenc...@apache.org> wrote: > Pranav, > > You can reference Calcite adaptors implementation, such as JDBC > Adaptor[1], MongoDB Adaptor[2]. > Their implementation allows pushing down operations (RelNode) to the > adapter as much as possible, and the left RelNodes will be implemented > using Enumerable Convention. > > We have a Converter[3] concept which makes this possible. The converter > node allows multiple Conventions in a single query. This also answers your > second question. > There is a talk[4] about this, it's very helpful for understanding this > concept. > > [1] > https://github.com/apache/calcite/blob/main/core/src/main/java/org/apache/calcite/adapter/jdbc/JdbcToEnumerableConverter.java > [2] > https://github.com/apache/calcite/blob/main/mongodb/src/main/java/org/apache/calcite/adapter/mongodb/MongoToEnumerableConverter.java > [3] > https://github.com/apache/calcite/blob/main/core/src/main/java/org/apache/calcite/rel/convert/Converter.java > [4] > https://calcite.apache.org/community/#fast-federated-sql-with-apache-calcite > > Julian Hyde <jhyde.apa...@gmail.com> 于2022年8月6日周六 02:06写道: > >> Pranav, >> >> Please subscribe to this list. You have asked several questions, received >> replies, not acknowledged those replies, and asked further questions. Also, >> since you are not subscribed, each email you post has to go through manual >> moderation. >> >> Julian >> >> > On Aug 5, 2022, at 9:38 AM, Pranav Deshpande < >> deshpande.v.pra...@gmail.com> wrote: >> > >> > Dear Apache Calcite Team, >> > I have 2 questions. >> > >> > --------------------------------- >> > 1. >> > >> > There are plenty of examples on how to push down projects and filters >> into >> > the leaf nodes (tablescans). >> > >> > However, I could not find any examples to push down joins to TableScans >> (or >> > joins+filters+projects etc.) [this is helpful for data federation I >> think]. >> > >> > On the mailing list, many folks are suggesting that I use Drill. >> However, >> > the purpose of my exercise is to gain knowledge about DBMS and Query >> > processing etc. >> > >> > I tried debugging open source engines that use Calcite (Drill, Druid, >> Trino >> > etc.) but was completely lost. >> > >> > Any examples/pointers/guidance around the same would be appreciated. >> > Example, pushing down a join with a filter to a DBMS(consider jdbc >> > msql etc.) >> > >> > ------------------------------------- >> > 2. >> > >> > The 2nd question I have is regarding conventions and different DBMS. The >> > cluster has a method to replace the trait convention(Bindable,JDBC >> etc.), >> > and then we optimize and get the physical plan. >> > >> > But imagine I have both the MYSQL JDBC convnction and a cassandra >> > convention and some user is trying to query both tables. >> > >> > Something like "SELECT users.username, specialdata.country from >> > cassandraDB.user join mysqlDB.specialdata ON users.id >> =specialdata.userid" >> > >> > Now, how will calcite do the optimization here? The planner is not >> > accepting 2 different conventions. >> > >> > Thanks & Regards, >> > Pranav >> >> > > -- > > Best, > Benchao Li >