Spark-源码学习-SparkSQL-架构设计-Parser 模块-AstBuilder-RegularQuerySpecificationContext
一、概述当整个解析过程访问到 RegularQuerySpecification 节点时,执行逻辑可以看作两部分: 首先访问 FromClauseContext 子树, 生成名为 from 的 LogicalPlan; 接下来,调用 withQuerySpecification 方法在 from 的基础上完成后续扩展。
12345678910111213141516override def visitRegularQuerySpecification( ctx: RegularQuerySpecificationContext): LogicalPlan = withOrigin(ctx) { val from = OneRowRelation().optional(ctx.fromClause) { visitFromClause(ctx.fromClause) } withSelectQuerySpecification( ctx, ctx.selectClause, ctx.la ...
Spark-源码学习-SparkSQL-架构设计-SQL 引擎-Parser 模块-ParserDriver
二、实现2.1. $parsePlan$调用 $sqlParser.parsePlan$ 执行 parse,SparkSqlParser 类中没有实现 $parsePlan$ 函数,调用父类 $AbstractSqlParser.parsePlan$:
12345678override def parsePlan(sqlText: String): LogicalPlan = parse(sqlText) { parser => astBuilder.visitSingleStatement(parser.singleStatement()) match { case plan: LogicalPlan => plan case _ => val position = Origin(None, None) throw QueryParsingErrors.sqlStatementUnsupportedError(sqlText, position) }}
$parsePlan$ 函 ...
Spark-源码学习-SparkSQL-架构设计-SQL 引擎-Parser 模块
一、概述SparkSQL 的 Parser 模块负责将 SQL 解析为 LogicalPlan,把整个 SparkSQL Parser 模块分为 构建抽象语法树 和 遍历抽象语法树 两个部分去学习😊~~~
二、Parser 模块架构设计
2.1. 架构设计2.1.1. ParseInterfaceCatalyst 中提供了直接面向用户的 ParseInterface 接口,该接口中包含了对 SQL 语句、Expression 表达式和 TableIdentifier 数据表标识符的解析方法。AbstractSqlParser 是实现了 ParseInterface 的虚类,其中定义了返回 AstBuilder 的函数。
2.1.2. AbstractSqlParser
SparkSqlParser
SparkSQL 的 SparkSqlParser,将 SQL 解析为 LogicalPlan。
CatalystSqlParser
CatalystSqlParser 用于 Catalyst 内部,而 SparkSqlParser 用于外部调用
2.1.3. SqlBas ...
Flink-源码学习-FlinkSQL&Table-执行环境 TableEnvironment
一、概述TableEnvironment 是 Flink Table API 和 Flink SQL 中使用的执行环境,向上对开发者提供了 Flink SQL 使用的相关接口,向下连接Flink的SQL运行时。
TableEnvironment 包含如下职责:
连接到外部数据源
注册 Table 和获取元数据信息。
执行 SQL 语句。
提供 SQL 执行的配置。
二、实现2.1. 架构设计TableEnvironment 是顶级接口,是所有 TableEnvironment 的基类
Flink 将批处理迁移到流计算上,实现了 API 接口到执行层面的统一,以前老版本中 BatchTableEnvironment 已经退出了历史的舞台。StreamTableEnvironment 与 TableEnvironment 接口相比,扩展了与 DataStream 的相互转换能力。
同时社区也在努力推动 Java 和 Scala TableEnvironment 的统一。Flink TableEnvironment 的未来架构会更加简洁,成为推荐使用的接口,只有当需要与 Dat ...
Flink-源码学习-FlinkSQL&Table 系列
一、执行环境TableEnvironment 是 Flink Table API 和 Flink SQL 中使用的执行环境,向上对开发者提供了 Flink SQL 使用的相关接口,向下连接 Flink 的 SQL 运行时。
引用本站文章
Flink-源码学习-FlinkSQL&Table-执行环境 TableEnvironment
Joker
二、TableTable 是 Flink Table API 的核心操作对象,提供了流批统一的数据操作行为定义。对于批处理 Table 是静态表,对于流计算 Table 是动态表。动态表在 Flink 中抽象为 Table 接口。与表示批处理数据的静态表相比,动态表随时间而变化。将 SQL 查询作用于动态表,查询会持续执行而不会终止,叫作连续查询。
引用本站文章
...
Spark-源码学习-SparkSQL 系列
一、执行环境Spark2.0 中引入了 SparkSession 的概念,为用户提供了一个统一的切入点来使用 Spark 的各项功能。
在 Spark 的早期版本,SparkContext 是进入 Spark 的切入点。RDD 的创建和操作得使用 SparkContext 提供的API; 对于 RDD 之外的其他东西,需要使用其他的 Context。
比如流处理使用 StreamingContext; 对于 SQL 得使用 SQLContext; 而对于 Hive 得使用 HiveContext。然而当 Dataset 和 DataFrame 提供的 API 逐渐成为新的标准 API,Spark 需要一个切入点来构建它们,在 Spark 2.0 中引入一个新的切入点: SparkSession。
引用本站文章
Spark-源码学习-SparkSession 设计
Joker
...
Spark-源码学习-SparkSQL-HelloAQE
一、概述在 Spark 3.0 引入了自适应查询执行(Adaptive Query Execution,AQE) 框架,AQE 是 Spark SQL 的一种动态优化机制,在运行时,每当 Shuffle Map 阶段执行完毕,AQE 都会结合这个阶段的统计信息,基于既定的规则动态地调整、修正尚未执行的逻辑计划和物理计划,来完成对原始查询语句的运行时优化。
首先,AQE 赖以优化的统计信息与 CBO 不同,这些统计信息并不是关于某张表或是哪个列,而是 Shuffle Map 阶段输出的中间文件,每个 Map Task 都会输出以 data 为后缀的数据文件,还有以 index 为结尾的索引文件,这些文件统称为中间文件。每个 data 文件的大小、空文件数量与占比、每个 Reduce Task 对应的分区大小,所有这些基于中间文件的统计值构成了 AQE 进行优化的信息来源。
其次,AQE 从运行时获取统计信息,在条件允许的情况下,优化决策会分别作用到逻辑计划和物理计划。
Spark AQE,总体思想是动态优化和修改 stage 的物理执行计划。利用执行结束的上游 stage 的统计信息 ...