+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