searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

查询引擎(sql)

2023-10-07 09:52:43
10
0

什么是查询引擎

可以把他理解成一个网关,对于数据库来说它叫查询引擎,对于对象存储来说,它就是一个rgw(ceph),作用都是将用户的查询语句转化成存储引擎能处理的调用;

datafusion

不同的数据库实现了不同细节的查询引擎,但是大致相似,正因此,出现了datafusion,旨在统一查询引擎,减少重复造轮子,我们以datafusion做基础来介绍sql查询引擎需要哪些能力,如果对细节有兴趣可以看duckdb的实现,非常完美和标准化;

语法解析

简单的关键词匹配,将其转换成抽象语法树,比如select * from table1;

匹配到第一个单词是select,那么产生一个扫表(scan table)的节点,这个节点的参数是:projection: *, table_name: table1,

注:projection就是投影,可理解为在一个大集中取子集就是投影;

这是一个简单的查询语句,产生只有一个节点的抽象语法树

创建逻辑计划

所以逻辑计划,可以理解为一个接口,这个计划规定要做什么,但是不规定怎么做

语义解析

刚刚的语法解析只是简单的关键字匹配,然后生成的逻辑计划,但是对于同一个关键字,在不同的语义下可以产生不同的逻辑计划,比如,projection中是否含有索引,如果有那就生产基于索引的扫表,如果没有,就产生全量的扫表,二者的实现会不一样,

逻辑计划优化

根据制定的优化规则进行优化,最常见的就是谓词下推,让计算更靠近数据源,减少数据的传输;

创建物理计划

物理计划就是逻辑计划的具体实现,比如一个扫表操作,逻辑计划只是指明扫表这个目的,那么物理计划就是扫表的具体细节,比如:任务应该发送到哪个存储节点,limit,projection,谓词处理这些

0条评论
0 / 1000
Mr. 油
89文章数
0粉丝数
Mr. 油
89 文章 | 0 粉丝
原创

查询引擎(sql)

2023-10-07 09:52:43
10
0

什么是查询引擎

可以把他理解成一个网关,对于数据库来说它叫查询引擎,对于对象存储来说,它就是一个rgw(ceph),作用都是将用户的查询语句转化成存储引擎能处理的调用;

datafusion

不同的数据库实现了不同细节的查询引擎,但是大致相似,正因此,出现了datafusion,旨在统一查询引擎,减少重复造轮子,我们以datafusion做基础来介绍sql查询引擎需要哪些能力,如果对细节有兴趣可以看duckdb的实现,非常完美和标准化;

语法解析

简单的关键词匹配,将其转换成抽象语法树,比如select * from table1;

匹配到第一个单词是select,那么产生一个扫表(scan table)的节点,这个节点的参数是:projection: *, table_name: table1,

注:projection就是投影,可理解为在一个大集中取子集就是投影;

这是一个简单的查询语句,产生只有一个节点的抽象语法树

创建逻辑计划

所以逻辑计划,可以理解为一个接口,这个计划规定要做什么,但是不规定怎么做

语义解析

刚刚的语法解析只是简单的关键字匹配,然后生成的逻辑计划,但是对于同一个关键字,在不同的语义下可以产生不同的逻辑计划,比如,projection中是否含有索引,如果有那就生产基于索引的扫表,如果没有,就产生全量的扫表,二者的实现会不一样,

逻辑计划优化

根据制定的优化规则进行优化,最常见的就是谓词下推,让计算更靠近数据源,减少数据的传输;

创建物理计划

物理计划就是逻辑计划的具体实现,比如一个扫表操作,逻辑计划只是指明扫表这个目的,那么物理计划就是扫表的具体细节,比如:任务应该发送到哪个存储节点,limit,projection,谓词处理这些

文章来自个人专栏
存储专栏
89 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0