Thanks. I am planning to go through this operator and follow your
suggestions to handle my business.


On Wed, Aug 9, 2023 at 11:46 James Starr <jamesst...@gmail.com> wrote:

> Alternatively, you could post-process the results after all the
> optimizations are performed.  It is not a great deal of work to write a
> recursive Rel/Rex Shuttle.
>
> James
>
> On Tue, Aug 8, 2023 at 7:12 PM LakeShen <shenleifight...@gmail.com> wrote:
>
> > From calcite's point of view, calcite is not binded to any engine, it is
> > not aware of the specific implementation of the underlying engine, as
> > julian said, SEARCH (and Sarg) is introduced for internal optimization of
> > calcite.
> >
> > In our project, we also do some extra processing for SEARCH (and Sarg),
> > maybe we could add a configuration parameter to control whether have the
> > SEARCH
> > (and Sarg) RexNode. For example,we could add a configuration parameter
> for
> > SqlToRelConverter if the user doesn't want a SEARCH (and Sarg)
> > expression,if false, SqlNode to RelNode would not have the SEARCH (and
> > Sarg) RexNode.
> >
> > Best, LakeShen
> >
> > Julian Hyde <jhyde.apa...@gmail.com> 于2023年8月9日周三 04:28写道:
> >
> > > The optimizations are the reason that SEARCH (and Sarg) exist. For the
> > > simplifier to handle all of the combinations of <, <=, >, >=, =, <>,
> and
> > > AND, OR, NOT is prohibitively expensive; if the same expressions are
> > > converted to Sargs they can be optimized using simple set operations.
> > >
> > >
> > > > On Aug 4, 2023, at 5:57 PM, P.F. ZHAN <dethr...@gmail.com> wrote:
> > > >
> > > > Thanks, Julian, for your answer. Initially, I was thinking that
> SEARCH
> > > > might not be essential. Since Calcite first translates it into a
> SEARCH
> > > > operator, and then we can use RexUtil#expandSearch to rewrite it into
> > an
> > > > operator supported by Spark, it seems like doing the same job twice.
> > So,
> > > > instead, why not consider disabling this operator, thus avoiding the
> > need
> > > > to reconvert the operator back into an expression supported by other
> > > > execution engines, such as Spark, later on? Frankly speaking, I might
> > not
> > > > have taken into account the potential simplifications brought by the
> > > SEARCH
> > > > operator for optimizing the execution plan. If these
> > > > simplifications produce a more efficient execution plan or make the
> > > > optimization stage more efficient, then I'm open to exploring ways to
> > > > implement an equivalent transformation within Kylin, or even
> exploring
> > > the
> > > > possibility of creating a similar implementation in other execution
> > > engines
> > > > like Spark.
> > > >
> > > > On Sat, Aug 5, 2023 at 2:57 AM Julian Hyde <jhyde.apa...@gmail.com>
> > > wrote:
> > > >
> > > >> I agree that it should be solved ‘by config’ but not by global
> config.
> > > The
> > > >> mere fact that you are talking to Spark (i.e. using the JDBC adapter
> > > with
> > > >> the Spark dialect) should be sufficient right?
> > > >>
> > > >> Put another way. Calcite’s internal representation for expressions
> is
> > > what
> > > >> it is. The fact that SEARCH is part of that representation has many
> > > >> benefits for simplification. Just expect there to be a a translation
> > > step
> > > >> from that representation to any backend.
> > > >>
> > > >> Julian
> > > >>
> > > >>
> > > >>> On Aug 4, 2023, at 7:22 AM, P.F. ZHAN <dethr...@gmail.com> wrote:
> > > >>>
> > > >>> Very nice suggestion. I wonder can we introduce this feature by
> > config?
> > > >>> Maybe it’s better for users using more than one query engine to
> > > interpret
> > > >>> and execute query.
> > > >>>
> > > >>>
> > > >>> On Fri, Aug 4, 2023 at 22:03 Alessandro Solimando <
> > > >>> alessandro.solima...@gmail.com> wrote:
> > > >>>
> > > >>>> Hello,
> > > >>>> as LakeShen suggests, you can take a look into
> RexUtil#expandSearch,
> > > you
> > > >>>> can see it in action in RexProgramTest tests, one example:
> > > >>>>
> > > >>>>
> > > >>>>
> > > >>
> > >
> >
> https://github.com/apache/calcite/blob/98f3048fb1407e2878162ffc80388d4f9dd094b2/core/src/test/java/org/apache/calcite/rex/RexProgramTest.java#L1710-L1727
> > > >>>>
> > > >>>> Best regards,
> > > >>>> Alessandro
> > > >>>>
> > > >>>> On Fri, 4 Aug 2023 at 15:45, LakeShen <shenleifight...@gmail.com>
> > > >> wrote:
> > > >>>>
> > > >>>>> Hi P.F.ZHAN,in calcite,it has a method RexUtil#expandSearch to
> > expand
> > > >>>>> Search,maybe you could get some information from this method.
> > > >>>>>
> > > >>>>> There is also some logic to simplify Search in the
> > > >>>>> RexSimplify#simplifySearch method. I hope this could help you.
> > > >>>>> Here's the code: 1.
> > > >>>>>
> > > >>>>>
> > > >>>>
> > > >>
> > >
> >
> https://github.com/apache/calcite/blob/98f3048fb1407e2878162ffc80388d4f9dd094b2/core/src/main/java/org/apache/calcite/rex/RexUtil.java#L593
> > > >>>>> 2.
> > > >>>>>
> > > >>>>>
> > > >>>>
> > > >>
> > >
> >
> https://github.com/apache/calcite/blob/98f3048fb1407e2878162ffc80388d4f9dd094b2/core/src/main/java/org/apache/calcite/rex/RexSimplify.java#L2132
> > > >>>>>
> > > >>>>> Best,
> > > >>>>> LakeShen
> > > >>>>>
> > > >>>>> Soumyadeep Mukhopadhyay <soumyamy...@gmail.com> 于2023年8月4日周五
> > > 20:29写道:
> > > >>>>>
> > > >>>>>> Thank you, shall explore more on this! :)
> > > >>>>>>
> > > >>>>>>
> > > >>>>>> On Fri, 4 Aug 2023 at 5:53 PM, P.F. ZHAN <dethr...@gmail.com>
> > > wrote:
> > > >>>>>>
> > > >>>>>>> Aha, I'm using Apache Kylin which uses Calcite to generate a
> > > logical
> > > >>>>>> plan,
> > > >>>>>>> then convert to Spark plan to execute a query. Given that
> Calcite
> > > has
> > > >>>>>> more
> > > >>>>>>> operations for aggregations, and Kylin  wants to take full
> > > advantage
> > > >>>> of
> > > >>>>>>> precomputed cubes (something like Calcite's materialized
> views),
> > it
> > > >>>>> uses
> > > >>>>>>> both Calcite and Spark(for distribution computing). Maybe it's
> > wild
> > > >>>>> and a
> > > >>>>>>> little fun, but it does works well on many scenarios.
> > > >>>>>>>
> > > >>>>>>> On Fri, Aug 4, 2023 at 8:10 PM Soumyadeep Mukhopadhyay <
> > > >>>>>>> soumyamy...@gmail.com> wrote:
> > > >>>>>>>
> > > >>>>>>>> I am curious about your use case. Are you not losing out on
> the
> > > >>>>>>>> optimisations of Calcite when you are using Spark? Is it
> > possible
> > > >>>> for
> > > >>>>>> you
> > > >>>>>>>> to share a general approach where we will be able to keep the
> > > >>>>>>> optimisations
> > > >>>>>>>> done by Calcite and use Spark on top of it?
> > > >>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>> On Fri, 4 Aug 2023 at 5:19 PM, P.F. ZHAN <dethr...@gmail.com>
> > > >>>> wrote:
> > > >>>>>>>>
> > > >>>>>>>>> Generally speaking, the SEARCH operator is very good, but
> when
> > we
> > > >>>>> use
> > > >>>>>>>>> Calcite to optimize the logical plan and then use Spark to
> > > >>>> execute,
> > > >>>>>>> this
> > > >>>>>>>> is
> > > >>>>>>>>> unsupported. So is there a more elegant way to close the
> SEARCH
> > > >>>>>>> operator?
> > > >>>>>>>>> Or how to convert the SEARCH operator to the IN operator
> before
> > > >>>>>>>> converting
> > > >>>>>>>>> the Calcite logical plan to the Spark logical plan? If we do
> > > >>>> this,
> > > >>>>> we
> > > >>>>>>>> need
> > > >>>>>>>>> to consider Join / Filter, are there any other RelNodes?
> > > >>>>>>>>>
> > > >>>>>>>>> Maybe, this optimization is optional more better at present
> for
> > > >>>>> many
> > > >>>>>>>> query
> > > >>>>>>>>> execution engine does not support this operator?
> > > >>>>>>>>>
> > > >>>>>>>>
> > > >>>>>>>
> > > >>>>>>
> > > >>>>>
> > > >>>>
> > > >>
> > > >>
> > >
> > >
> >
>

Reply via email to