概述 Spark SQL作为大数据开发中非常重要的工具,如果能对其内部原理有进一步的了解,那么能更好的使用它。 计划花半年时间,把Spark SQL源码看一遍,算完整的总结一下。...Resolved Logical Plan Analyzed Logical Plan Optimized Logical Plan Physical Plan Executed Plan 版本信息 Spark SQL...版本:3.3 Scala版本:2.12 注意:本系列文章参考《Spark SQL内核剖析》 ----
,便开始研读相关的源码以及写相应的文章,这篇便作为 Spark Sql 系列文章的第一篇。...既然是第一篇,那么就来说说在 Spark Sql 中一条 sql 语句的主要执行流程,来看看下面这个简单的例子: val spark = SparkSession .builder() .appName...下面,我们分别来看看这两大块 sql 语句到 sqlDataFrame 这个过程的 uml 时序图如下: ?...根据该时序图,我们对该过程进一步细分: 第1~3步:将 sql 语句解析为 unresolved logical plan,可以大致认为是解析 sql 为抽象语法树 第4~13步:使用之前得到的 unresolved...这篇文章是一片相对宏观的整体流程的分析,目的有二: 一是说清楚 Spark Sql 中一条 sql 语句的执行会经过哪几个核心的流程,各个核心流程大概做了什么 二是这里指出的各个核心流程也是接下来进一步进行分析学习的方向
本文首发于个人公众号 Java 技术大杂烩,欢迎关注 Mybatis Mapper.xml 配置文件中 resultMap 节点的源码解析 Mybatis 解析 SQL 源码分析一 Mybatis...Mapper 接口源码解析 Mybatis 数据库连接池源码解析 Mybatis 类型转换源码分析 Mybatis 解析配置文件的源码解析 前言 在上两篇文章 Mybatis 解析 SQL 源码分析一...和 Mybatis Mapper.xml 配置文件中 resultMap 节点的源码解析 中分析了 Mybatis 是如何解析 Mapper.xml 配置文件的,配置文件中配置的 SQL 节点被解析成了一个个的...下面就来看下这部分的源码,看看 Mybatis 是如何解析的。...该部分的解析会涉及到 组合模式 和 OGNL 表达式的应用 SqlSource 在 Mybatis 解析 SQL 源码分析一 文章中我们知道,配置文件中的 SQL 语句会被解析成 SqlSource
当一条 sql 语句被 SparkSqlParser 解析为一个 unresolved logicalPlan 后,接下来就会使用 Analyzer 进行 resolve。...1.3、SQLConf 用来 get、set SQL 相关的配置、参数。其伴生 object 包含了 spark sql 的所有参数及其类型、说明、默认值。
CurrentOrigin 仅在 parser 中使用,在 visit 每个节点的时候都会使用,记录当前 parse 的节点是哪行哪列 另外,从 value 是 ThreadLocal 类型可以看出,在 Spark SQL...中,parse sql 时都是在单独的 thread 里进行的(不同的 sql 不同的 thread) 二、重要方法 2.1、children: Seq[BaseType](由子类实现) 返回该节点的
一、go-sql-driver使用过程 1、建立连接 首先是Open, db, err := sql.Open(“mysql”, “user:password@/dbname”) db 是一个*sql.DB...的主要方法: Exec Query QueryRow Close 用法与DB类似 Rows的主要方法: Cloumns//返回[]string,column names Scan Next Close 二、源码分析...1,初始化 golang的源码包里database/sql只定义了连接池和常用接口、数据类型 具体到mysql 的协议实现在 github.com/go-sql-driver/mysql 因此我们需要在使用的时候这样导入依赖...import ( "database/sql" _ "github.com/go-sql-driver/mysql" ) 这个import做了什么呢 _ "github.com/go-sql-driver...先看下golang 源码中驱动相关的代码,定义在这个文件中:src/database/sql/sql.go var drivers = make(map[string]driver.Driver
DROP TABLE #temp; with cr as ( SELECT At.SysNo AS AtSysNo , ...
静下心来读源码,给想要了解spark sql底层解析原理的小伙伴们!...assert(pruned.hasNext, s"No plan for $plan") pruned } 生成过程 SELECT A,B FROM TESTDATA2 WHERE A>2 该sql...$TestData2, true])).a AS a#3, knownnotnull(assertnotnull(input[0, org.apache.spark.sql.test.SQLTestData...+- Filter (A#3 > 2) +- SerializeFromObject [knownnotnull(assertnotnull(input[0, org.apache.spark.sql.test.SQLTestData...$TestData2, true])).a AS a#3, knownnotnull(assertnotnull(input[0, org.apache.spark.sql.test.SQLTestData
https://github.com/go-sql-driver 实现了基本的sql操作 https://github.com/jmoiron/sqlx 实现了增强版的复杂sql操作 1)database...而我们通过分析规范的源码包,能够提升自己的编码水平。...源码 先来看看 readPacket ,结合上面的知识点应该非常好理解。...lastcols []driver.Value } 我们跳过 database/sql 包中的 Rows 实现,其无非是提供了更多功能的一个结果集而已,让我们回到真正与数据库进行交互的 Rows 中进行源码分析...return mc.writePacket(data) } 相信看到这里,已经能对看懂源码的 70% 了,剩余的代码都是和协议相关,就留待有兴趣的读者继续研究,这里就不再展开讲了。
本文首发于个人公众号 Java 技术大杂烩,欢迎关注 相关文章 Mybatis Mapper 接口源码解析 Mybatis 数据库连接池源码解析 Mybatis 类型转换源码分析 Mybatis 解析配置文件的源码解析...Mapper.xml 配置文件中解析SQL,二是把 SQL 解析成为数据库能够执行的原始 SQL,把占位符替换为 ?...配置文件的时候,会调用 bindMapperForNamespace 进行注册Mapper接口,表示该配置文件对应的Mapper接口`,关于 Mapper 的注册可以参考 Mybatis Mapper 接口源码解析...namespace="com.someone.application.data.SomeMapper"/> 2 3cacheRefElement(context.evalNode("cache-ref")); 解析的源码如下...在 Mybatis 中使用 SqlSource 来表示 SQL语句,但是这些SQL 语句还不能直接在数据库中进行执行,可能还有动态SQL语句和占位符等。
本文内容: Flink SQL WINDOW功能介绍 底层实现源码分析:StreamExecGroupWindowAggregate创建WindowOperator 底层实现源码分析:WindowOperator...算子处理数据这两个地方源码分析。...由于flink-planner-blink SQL中目前只支持TimeWindow相应的表达语句(TUMBLE、HOP、SESSION),因此,本文主要介绍TimeWindow SQL示例和逻辑,CountWindow...WindowOperator源码调试 为了更直观的理解Window内部运行原理,这里我们引入一个Flink源码中已有的SQL Window测试用例,并进行了简单的修改(即修改为使用HOP滑动窗口) classWindowJoinITCase...,只是使用的方式不一样 1、Emit策略 Emit 策略是指在Flink SQL 中,query的输出策略(如能忍受的延迟)可能在不同的场景有不同的需求,而这部分需求,传统的 ANSI SQL 并没有对应的语法支持
一、MyBatis中Sql执行过程 先上一段代码,看直接调用MyBatis Api是如何执行Sql的: // 获取配置文件输入流 InputStream inputStream = Resources.getResourceAsStream...那Sql到底是怎么执行的,明明第一步只定义了一个接口,Java中接口是不能实例化的,只能通过类来实例的,它是如何和我们在Xml中编写的Sql绑定的呢?...} } 其中resolveMappedStatement会在Configuration中查找是否有注册相应的MappedStatement,具体过程参考下一篇文章 MyBatis源码分析二...MapperMethod,执行接口的方法就是执行MapperMethod的execute方法,在执行过程中通过查找接口名称对应的MapperedStatement对象(代表一条Sql语句)来执行相应的Sql...,从而达到接口和Sql关联 。
在了解了窗口函数实现原理 spark、hive中窗口函数实现原理复盘 和 sparksql比hivesql优化的点(窗口函数)之后,今天又撸了一遍hive sql 中窗口函数的源码实现,写个笔记记录一下
概述 区别于 Lexer,Parser 理解SQL: 提炼分片上下文 标记需要SQL改写的部分 Parser 有三个组件: SQLParsingEngine :SQL 解析引擎 SQLParser :SQL...其 #parse() 方法作为 SQL 解析入口,本身不带复杂逻辑,通过调用 SQL 对应的 StatementParser 进行 SQL 解析。...解析器,主要提供只考虑 SQL 块的解析方法,不考虑 SQL 上下文。...StatementParser SQL语句解析器 4.1 StatementParser StatementParser,SQL语句解析器。每种 SQL,都有相应的 SQL语句解析器实现。...SQL 标记对象:用于 SQL 改写。 ? 我们会在后文增删改查SQL解析的过程中分享到它们。
备注:ANTLR语法的学习,可以参考书籍《ANTLR权威指南》SQL解析Spark SQL通过Antlr4定义SQL的语法规则,完成SQL词法,语法解析,最后将SQL转化为抽象语法树。....g4文件在如下路径:src/main/antlr4/org/apache/spark/sql/catalyst/parser/SqlBaseLexer.g4src/main/antlr4/org/apache.../spark/sql/catalyst/parser/SqlBaseParser.g4其中SqlBaseLexer.g4是词法文件,SqlBaseParser.g4是语法文件,Spark SQL就是通过这两个文件来解析...SQL的。...for a given SQL string.
之前总结的已经写了传统数据库与Spark的sql解析之间的差别。...它是一个字典表,用于注册表,对标缓存后便于查询,源码如下: 这个类呢,是个特质,定义了一些tableExistes:判断表是否存在啊,registerTable:注册表啊、unregisterAllTables...这个Keyword其实是对sql语句进行了解析: 然后拿一个select的sql语法解析为例,本质就是将sql语句的条件进行了匹配,过滤筛选: 一个select的步骤包括,获取DISTINCT语句...第一遍源码,讲究先全通一下吧。 ...参考文献:《深入理解Spark:核心思想与源码分析》
sharding-sephere源码解析之sql解析 这里我们以org.apache.shardingsphere.shardingjdbc.jdbc.core.statement.ShardingPreparedStatement...源码: ?...PreparedStatementRoutingEngine 看下源码: public final class PreparedStatementRoutingEngine { /**...(), databaseType, sql, shardingTableMetaData); } } 它父类的源码: @RequiredArgsConstructor public abstract...* * @param sql SQL * @param useCache use cache or not * @return SQL statement
在阅读官方文档的过程,看到这么一段描述:“核心由SQL解析 => 执行器优化 => SQL路由 => SQL改写 => SQL执行 => 结果归并的流程组成”。...SQL路由,根据解析上下文匹配用户配置的分片策略,并生成路由路径 SQL改写,将SQL改写为在真实数据库中可以正确执行的语句。 SQL执行,通过多线程执行器异步执行。...它将原始的 SQL 字符串拆解成了 ParseTree 的对象。...四、jar 源码解析 pom.xml parent 项目是 shardingsphere-sql-parser 工程。...五、总结 以上是“SQL解析器”的源代码内容,这部分代码主要运用到了工厂模式、单例模式、cache 缓存,以及 antlr 解析 SQL 语法的第三方插件来实现的。
周末开始紧张筹备啦 整了一个干净的mac电脑 从0装一遍spark sql源码环境 重新走一遍流程,写个最新的文档,给群里的小伙伴用 这次分享用的是git上最新的spark branch3.2 有同学不会...scala,从网上找了免费的scala视频,链接已经放在了知识星球的置顶帖,下周要跟的同学,得提前看看 其实还好啦,我也不懂scala,俺是边看spark源码边学的scala,现在回想一下,spark...sql源码中用的多且相对难理解的用法有下面几个: 1、偏函数 比如:transformUp、transformDown 2、柯里化 比如:ParseDriver中的parse方法 3、case模式匹配...写文章时,刚刚看到源码编译成功啦 emmm...... 下周开怼,有点激动~~
源码分析类文章通常比较枯燥。因此,我在分析源码的过程中写了一些示例,同时也绘制了一些图片。希望通过这些示例和图片,帮助大家理解 MyBatis 的源码。 ?...如果你不信的话,那我们看源码吧,源码面前了无秘密。...在源码中,片段这个概念等价于 sql 节点,即 SqlNode。SqlNode 是一个接口,它有众多的实现类。其继承体系如下: ?...对于这些内容,如果大家能耐心看完本文,并且仔细分析了 MyBatis 执行 SQL 的相关源码,那么对 MyBatis 的原理会有很深的理解。深入理解 MyBatis,对日常工作也会产生积极的影响。...07-20 MyBatis 源码分析 - 配置文件解析过程 2018-07-30 MyBatis 源码分析 - 映射文件解析过程 2018-08-17 MyBatis 源码分析 - SQL 的执行过程
领取专属 10元无门槛券
手把手带您无忧上云