首先spark sql的设计总体上:
1,首先我们要有一个树的节点,通过这个节点可以继承出单孩子节点,双孩子节点,叶子节点以及多孩子节点。
1.1,树的节点有最基本的遍历操作,这个遍历操作支持各种遍历,前缀后缀中缀,因为有些expression的折叠方式这样要求。
2,expression继承的是树的节点,因为expression可能含有两个孩子,一个孩子,多个孩子,也可能没有孩子。
3,QueryPlan继承的也是树节点,因为QueryPlan是可能还有如join两个孩子的逻辑算子,aggregation一个孩子的逻辑算子,或者relation叶子节点的逻辑算子。由QueryPlan再继承出LogicalPlan和PhysicalPlan的。LogicalPlan之上又有UnaryNode,BinaryNode,LeafNode,通过这些可以集成出join,aggregation等逻辑算子。PhysicalPlan在spark sql中叫SparkPlan,同理有SparkPlan继承出的UnaryNode,BinaryNode,LeafNode,通过这些可以继承出最终的物理join,aggregation。
1.1,树的节点有最基本的遍历操作,这个遍历操作支持各种遍历,前缀后缀中缀,因为有些expression的折叠方式这样要求。
2,expression继承的是树的节点,因为expression可能含有两个孩子,一个孩子,多个孩子,也可能没有孩子。
3,QueryPlan继承的也是树节点,因为QueryPlan是可能还有如join两个孩子的逻辑算子,aggregation一个孩子的逻辑算子,或者relation叶子节点的逻辑算子。由QueryPlan再继承出LogicalPlan和PhysicalPlan的。LogicalPlan之上又有UnaryNode,BinaryNode,LeafNode,通过这些可以集成出join,aggregation等逻辑算子。PhysicalPlan在spark sql中叫SparkPlan,同理有SparkPlan继承出的UnaryNode,BinaryNode,LeafNode,通过这些可以继承出最终的物理join,aggregation。
4