SparkSQL DDL语句执行过程


发布于 2024-08-01 / 32 阅读 / 0 评论 /
SparkSQL中的DDL语句的执行主要通过对应的catalog元数据管理器来完成。

DDL全称Data Definition Laugnage,是用于定义和管理数据库结构的语句。

1.DDL执行过程

SparkSQL中,DDL的执行过程比较简单,核心是操作元数据,通过对应的元数据管理器catalog来实现。

执行过程分为以下几个步骤:

1.1.通过SparkSession.sql方法提交sql

SparkSQL是基于SparkSession的上层API,SQL的提交也是通过SparkSession.sql方法来实现。过程如下所示:

org.apache.spark.sql.SparkSession.sql() // 通过SparkSession提交SQL任务
    tracker = new QueryPlanningTracker
    plan = tracker.measurePhase // 生成执行计划
    Dataset.ofRows(self, plan, tracker) // 执行SQL任务,并提取sql执行结果
        qe = new QueryExecution(sparkSession, plan, tracker) // 生成执行单元
            sparkPlan = QueryExecution.createSparkPlan // 生成执行计划
        qe.assertAnalyzed() // 任务执行
            org.apache.spark.sql.catalyst.analysis.Analyzer.executeAndCheck(plan, tracker)
                Analyzer.executeAndTrack(plan, tracker) 
                    org.apache.spark.sql.catalyst.rules.RuleExecutor.execute(plan) // 执行任务
                Analyzer.checkAnalysis // 分析结果
        new Dataset[Row](qe, RowEncoder(qe.analyzed.schema)) // 返回值

这里省略了SparkSession的初始化过程。

1.2.生成执行任务Execution

//todo 待实现

1.3.任务执行

这里是Catalog具体方法的调用过程,下面以“drop table”语句为例。

org.apache.spark.sql.catalyst.analysis.ResolveSessionCatalog#apply
org.apache.spark.sql.execution.command.DropTableCommand#run
org.apache.spark.sql.hive.HiveSessionCatalog
org.apache.spark.sql.hive.HiveExternalCatalog.dropTable
org.apache.spark.sql.hive.client.HiveClient.dropTable
org.apache.hadoop.hive.ql.metadata.Hive#dropTable