黄色的是数据结构,蓝色的spark的模块,绿色的是hive matestore 。
SQL和DataFrame 进来会先解析成逻辑执行计划,从hive metasotre里面拿一些表、字段的元数据信息,生成一个解析过的执行计划。经过spark的优化器,改变逻辑执行计划的逻辑结构,通过planner生成物理的执行计划。
将sql转换成抽象语法书(逻辑执行计划)
右边的含义:relation就是一个表的意思,UNresolveRelation是指还没有解析过,现在还没有从元数据那获取信息,不知道表里具体的情况;再往上是有一个left join,join的key值是id;经过join之后是Filter,是where里面的条件;然后是Project,叫做投影,是select里面选的字段。
Analyze是查询hive metastore,绑定元数据,拿一些table的信息、列的信息等,如果这个是一个view(视图),就会展开视图的逻辑,做进一步的解析。红色部分为发生的变化。
经过绑定元数据之后,UNresolveRelation变成了CatalogRelation,CatalogRelation代表的是hive表的意思,会绑定字段的类型,如果查一个不存在的字段或者表,就会在这一步报错