def sql(sqlText: String): DataFrame = withActive { val tracker = new QueryPlanningTracker val plan = tracker.measurePhase(QueryPlanningTracker.PARSING) { sessionState.sqlParser.parsePlan(sqlText)
Spark SQL主要由Catalyst优化、Spark SQL内核、Hive支持三部分组成。 (1)Catalyst优化 处理查询语句的整个过程,包括解析、绑定、优化、物理计划等,主要由关系代数(relation algebra)、表达式(expression)以及查询优化(query optimization)组成。 (2)Spark SQL内核 处理数据的输入输出,从不同的数据源(结构化数据Parquet文件...
Spark SQL自适应执行优化引擎(Adaptive Query Execution,简称AQE)应运而生,它可以根据执行过程中的中间数据优化后续执行,从而提高整体执行效率。核心在于:通过在运行时对查询执行计划进行优化,允许Spark Planner在运行时执行可选的执行计划,这些计划将基于运行时统计数据进行优化,从而提升性能。 AQE完全基于精确的运行时统计...
近些年来,Spark SQL 一直在针对CBO 特性进行优化,而且做得十分成功。 CBO基本原理 首先,我们先来介绍另一个基于规则优化(Rule-Based Optimization,简称RBO)的优化器,这是一种经验式、启发式的优化思路,优化规则都已经预先定义好,只需要将SQL往这些规则上套就可以。简单地说,RBO就像是一个经验丰富的老司机,基本...
2023-01-012023-01-032023-01-052023-01-072023-01-092023-01-112023-01-132023-01-152023-01-172023-01-192023-01-21Read Sales DataRead Product DataMerge DataPartition DataBroadcast JoinExecute SQL QueryData ReadingData ProcessingData QueryingSpark SQL Optimization Gantt Chart ...
val queryCaseWhen = sql("select key from src ") 然后在Optimization优化阶段后,变成了: Project [_1#2ASkey#5] +- LocalRelation [_1#2, _2#3] 好吧,看起来没什么变化,与Analysis阶段相比,也就少了个SubqueryAlias ,符合预期。不过也对,就一条SELECT语句能优化到哪去啊。
spark.sql.inMemoryColumnarStorage.enableVectorizedReader TRUE Enables vectorized reader for columnar caching. spark.sql.optimizer.metadataOnly TRUE When true, enable the metadata-only query optimization that use the table’s metadata to produce the partition columns instead of table scans. It applies wh...
Spark SQL源码解析(三)Analysis阶段分析 前面已经介绍了SQL parse,将一条SQL语句使用antlr4解析成语法树并使用访问者模式生成Unresolved LogicalPlan,然后是Analysis阶段将Unresolved LogicalPlan转换成Resolved LogicalPlan。这一篇我们介绍Optimization阶段,和生成Physical Planning阶段。
之前介绍在sparksession实例化的是会实例化sessionState,进而确定QueryExecution、Analyzer,Optimizer也是在这一步确定的: 1 2 3 4 5 6 protecteddefoptimizer:Optimizer={ newSparkOptimizer(catalog, experimentalMethods) { overridedefextendedOperatorOptimizationRules:Seq[Rule[LogicalPlan]]= ...
Query Optimization Spark SQL’s Catalyst Optimizer handles logical optimization and physical planning, supporting both rule-based and cost-based optimization. When possible, Spark SQL Whole-Stage Java Code Generation optimizes CPU usage by generating a single optimized function in bytecode for the set...