在使用spark进行sql分析过程中,一般是将sql语句解析成LogicalPlan查看执行计划,LogicalPlan能够帮助我们了解Spark-SQL的解析,转换,优化,映射和执行的机制。最近在看Spark-SQL源码过程中,了解到一个逆向逻辑,即将LogicalPlan逆向生成SQL语句。代码实现在org.apache.spark.sql.catalyst.SQLBuilder
中。
如果手上有一个logicalPlan,通过创建SQLBuilder实例,调用toSQL方法就可以进行逆向转化。
值得注意的是,并不是所有的logicalPlan通过转化后生成的sql都可以进行二次执行,SQLBuilder仅仅满足了一些简单的转化逻辑,如果想实现复杂的sql生成逻辑,要改造源码。目前只解决了子查询不匹配的问题,可用于sql转换后的二次执行。