sorry for late reply, thank you very much, very excellent description.

2016-08-19 16:48 GMT+08:00 Julian Hyde <[email protected]>:

> +1
>
> Thanks, Jordan, for an excellent description.
>
> Julian
>
> > On Aug 16, 2016, at 6:33 PM, [email protected] wrote:
> >
> > SqlNode is the abstract syntax tree that represents the actual structure
> of the query a user input. When a query is first parsed, it's parsed into a
> SqlNode. For example, a SELECT query will be parsed into a SqlSelect with a
> list of fields, a table, a join, etc. Calcite is also capable of generating
> a query string from a SqlNode as well.
> >
> > RelNode represents a relational expression - hence "rel." RelNodes are
> used in the optimizer to decide how to execute a query. Examples of
> relational expressions are join, filter, aggregate, etc. Typically,
> specific implementations of RelNode will be created by users of Calcite to
> represent the execution of some expression in their system. When a query is
> first converted from SqlNode to RelNode, it will be made up of logical
> nodes like LogicalProject, LogicalJoin, etc. Optimizer rules are then used
> to convert from those logical nodes to physical ones like JdbcJoin,
> SparkJoin, CassandraJoin, or whatever the system requires. Traits and
> conventions are used by the optimizer to determine the set of rules to
> apply and the desired outcome, but you didn't ask about conventions :-)
> >
> > RexNode represents a row expression - hence "Rex" - that's typically
> contained within a RelNode. The row expression contains operations
> performed on a single row. For example, a Project will contain a list of
> RexNodes that represent the projection's fields. A RexNode might be a
> reference to a field from an input to the RedNode, a function call
> (RexCall), a window (RexOver), etc. The operator within the RexCall defines
> what the node does, and operands define arguments to the operator. For
> example, 1 + 1 would be represented as a RexCall where the operator is +
> and the operands are 1 and 1.
> >
> > What RelNode and RexNode together give you is a way to plan and
> implement a query. Systems typically use VolcanoPlanner (cost-based) or
> HepPlanner (heuristic) to convert the logical plan (RelNode) into a
> physical plan and then implement the plan by converting each RelNode and
> RexNode into whatever is required by the system for which the plan is
> generated. The optimizer might push down or pull up expressions or reorder
> joins to create a more optimal plan. Then, to implement that plan, e.g. the
> JDBC integration will convert an optimized RelNode back into a SqlNode and
> then a query string to be executed against some database over JDBC. The
> Spark implementation will convert RelNodes into operations on a Spark RDD.
> The Cassandra implementation will generate a CQL query, etc.
> >
> >> On Aug 15, 2016, at 11:52 PM, xuedong luan <[email protected]>
> wrote:
> >>
> >> dear all:
> >>        I am a newer on calcite, and i don't know the difference between
> >> sqlnode and relnode and rexnode . Can anyone help me? thank you very
> much
>
>

Reply via email to