Pranav, sorry that I didn't see you already posted the question to the mailing list.
Benchao Li <[email protected]> 于2022年8月14日周日 11:28写道: > Pranav, > > Reposted your mail to the dev mailing list. (It's recommended to reply to > dev mailing list instead of someone's email address) > > > 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. > > I don't know any existing rule does this for now. > You can add your own rule to achieve this, it won't be complex. You may > need to do more work to abstract out the interface to accept the 'Join > Pushdown'. > > > > Pranav Deshpande <[email protected]> 于2022年8月13日周六 01:21写道: > >> 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 <[email protected]> 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 <[email protected]> 于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 < >>>> [email protected]> 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 >>> >> > > -- > > Best, > Benchao Li > -- Best, Benchao Li
