1.大数据体系和SQL

1.1SQL流行原因

SQL 是用于访问和处理数据库的标准的计算机语言。

1.SQL 指结构化查询语言

2.SQL 使我们有能力访问数据库

3.SQL 是一种 ANSI 的标准计算机语言

1.SQL语言具有高效性

2.SQL提供了一种标准的接口

1.2SQL处理流程

1.Parser(解析器)

参考链接:什么是解析器?定义、类型和示例 (techtarget.com)

在计算机技术中,解析器是一种程序,通常是编译器的一部分。它以顺序源程序指令,交互式在线命令,标记标签或其他一些定义的接口的形式接收输入。解析器将它们获得的输入分解为名词(对象)、谓词(方法)及其属性或选项等部分。然后由其他编程(如编译器中的其他组件)管理这些组件。解析器还可以检查以确保已提供所有必要的输入。

解析器工作流程:

1.词法分析

词法分析器(或扫描程序)从预处理器获取代码并将其分解为更小的部分。它将输入代码分组为称为词素的字符序列,每个字符对应于一个标记。标记是编译器理解的编程语言中的语法单元。

词法分析器还会从输入中删除空格字符、注释和错误。

2.句法分析

此阶段的解析使用称为解析树或派生树的数据结构检查输入的语法结构。语法分析器使用标记来构造分析树,该分析树将编程语言的预定义语法与输入字符串的标记相结合。如果语法不正确,则语法分析器将报告语法错误。

3.语义分析

语义分析根据符号表验证解析树,并确定它在语义上是否一致。此过程也称为上下文相关分析。它包括数据类型检查、标签检查和流控制检查。

示例:

给定字符集 x+z=11,词法分析器会将其分成一系列标记,并按如下所示对它们进行分类。

语法分析器将 (x+y)*3 作为输入并返回此解析树,使解析器能够理解等式。

2.Analyzer和Logical Plan

参考文档:一条 sql 的执行过程详解 - 萌新J - 博客园 (cnblogs.com)

Analyzer(分析器)

对客户端传来的 sql 进行分析,这将包括预处理与解析过程,并进行关键词的提取、解析,并组成一个解析树。具体的解析词包括但不局限于 select/update/delete/or/in/where/group by/having/count/limit 等,如果分析到语法错误,会直接抛给客户端异常:ERROR:You have an error in your SQL syntax.

比如:select * from user where userId =1234;

在分析器中就通过语义规则器将select from where这些关键词提取和匹配出来,mysql会自动判断关键词和非关键词,将用户的匹配字段和自定义语句识别出来。这个阶段也会做一些校验:比如校验当前数据库是否存在user表,同时假如User表中不存在userId这个字段同样会报错:unknown column in field list.

概述:Analyzer将检查并绑定元信息,将AST转变成Logical Plan,Logical Plan 逻辑地描述SQL对应的分步骤计算操作(算子)。

3.Optimizer(查询优化)

进入优化器说明sql语句是符合标准语义规则并且可以执行。优化器会根据执行计划选择最优的选择,匹配合适的索引,选择最佳的方案,并将跟踪结果记录在某表中,

Physical Plan 是执行计划子树,用于最小化网络数据传输,可以利用数据的物理分布(数据亲和性)并增加shuffle算子。

(引用)

没有使用最优索引如何优化:

1、虽然会自动更新统计信息,但是但是不能保证统计信息是最新值,这就可能导致优化器选择了不同的索引导致执行变慢,所以可以通过 " analyze table 表名" 来重新计算索引的统计信息。

2、在表名后面添加 " force index(索引名) " 语句来强制使用索引

3、将 sql 进行修改成优化器可以选最优索引的实现方式。

4、新建一个最优索引或者删除优化器误用的索引。

4.Executor(执行器)

参考文档:SQL Executor - Gooddata Enterprise

执行器负责解析 SQL 执行查询,分为两种:

单机并行:cache,pipeline,SIMD

多机并行:一个fragment对应多个实例

2.查询优化器

1.查询优化器分类:

Top-down Optimizer :从上往下遍历计划树,找到完整的最优执行计划。

例子:Volcano/Cascade,SQLServer

Bottom-up Optimizer:从下往上遍历计划树,找到完整的执行计划。

例子:System R,PostgreSQL,IBM DB2

Rule-based Optimzer(RBO):根据关系代数等价语义,重写查询。 基于启发式规则。 会访问表的元信息,不会涉及具体表数据。

Cost-based Optimzer(CBO):使用一个模型估算执行计划的代价,选择代价最小的执行计划。

2.RBO(基于规则的优化器)

关系代数

运算符:select,project,join,Renam,Union

等价变换:结合律、交换律、传递性

优化规则

1.Read data less and faster(I/O)

2.Transfer data less and faster (Network)

3.Process data less and faster(cpu&Memory)

列裁剪:将不需要的列表信息直接在搜索树中裁剪出去,减少数据消耗

谓词下推:JOIN与FILTER交换,把某些影响范围小的谓词下推,减少无用信息的时间消耗

传递闭包:FILTER>123推出FILTER中pv.siteld>123

Runtime Filter:提早过滤, 用(min-max in-list bloom filter)减小搜索范围(数据范围必须要集中)

总结

主流RBO实现一般都有几百条基于经验所得到的优化规则

优点:实现简单,优化速度快

缺点:不保证得到最优的执行计划

3.CBO

概念

使用一个模型估算执行计划的代价,选择最小的执行计划

1.执行计划代价等于所有算子的执行代价之和

2.通过RBO得到(所有)可能的等价执行计划。

算子代价:CPU、内存、磁盘I/O、网络I/O等代价

统计信息

原始表统计信息

1.表或者分区级别:行数、行平均大小、表在磁盘中占用了多少字节等

2.列级别:min、max、num nulls、num not nulls、num distinct value、histogram等

推导统计信息

1.选择率:对于某一个过滤条件,查询会从表中返回多大比例的数据

2.基数:查询计划中常指算子需要处理的行数。

统计信息的收集方式

1.在DDL里指定需要收集的统计信息,数据库会在数据写入时收集或者更新统计信息

2.手动执行 explain analyze statement,触发数据库收集或者更新统计信息

3.动态采样

统计信息推导规则(前提假设列和列之间独立,列的值是均匀分布)

AND条件: fs(a AND b) = fs(a) * fs(b)

OR条件: fs(a OR b) = fs(a) + fs(b) - (fs(a) * fs(b))

NOT条件: fs(NOT a) = 1.0- fs(a)

等于条件(x = literal) literal < min && literal > max: 0 V1/NDV

小于条件 (x < literal) literal < min: 0 literal > max: 1 (literal - min) / (max - min)

执行计划枚举

通常使用贪心算法或动态选出最优的执行计划

总结:

1.CBO使用代价模型和统计信息估算执行计划中的代价

2.CBO使用贪心或者动态规划算法寻找最优执行计划

3.在大数据场景下CBO对查询性能非常重要

3.社区开源实践

3.1Apache Calcite

1.one size fits all :统一的SQL查询引擎

2.模块化,插件化,可靠稳定

3.支持异构数据模型(关系型、半结构化、流式、地理空间数据)

4.内置RBO和CBO

3.2Calcite RBO

HepPlanner

参考链接:HepPlanner (Apache Calcite API)

3.3Calcite CBO

VolcanoPlanner

参考链接:VolcanoPlanner (Apache Calcite API)

总结:

1.主流的查询优化器都包含RBO和CBO

2.Apache Calcite是大数据领域很流行的查询优化器

3.Apache Calcite RBO定义了许多优化规则,使用pattern匹配子树,执行等价变换

4.Apache Calcite CBO基于Volcano/Cascade框架

5.Volcano/Cascad的精髓:Memo、动态规划、剪枝
he/calcite/plan/volcano/VolcanoPlanner.html)

总结:

1.主流的查询优化器都包含RBO和CBO

2.Apache Calcite是大数据领域很流行的查询优化器

3.Apache Calcite RBO定义了许多优化规则,使用pattern匹配子树,执行等价变换

4.Apache Calcite CBO基于Volcano/Cascade框架

5.Volcano/Cascad的精髓:Memo、动态规划、剪枝

SQL查询优化器浅析-字节跳动大数据青训营相关推荐

  1. 字节跳动大数据中心17万服务器硬实力支撑今日头条等产品线(公号回复“字节跳动”下载PDF典型资料,欢迎转发、赞赏支持科普)

    字节跳动大数据中心17万服务器硬实力支撑今日头条等产品线(公号回复"字节跳动"下载PDF典型资料,欢迎转发.赞赏支持科普) 原创: 秦陇纪 科学Sciences 昨天 科学Scie ...

  2. 字节跳动大数据岗笔试经验分享

    字节跳动青训营大数据笔试经验分享 青训营是什么呀? 青训营面向什么人群? 在青训营可以收获什么? 青训营的流程是什么呢? 如何报名参加青训营?怎样才算报名成功呢?如何进入官方群聊? 报名时选择的基础班 ...

  3. sql怎么实现取当前数据以及累计7天数据_年薪60万+大佬吐血整理字节跳动大数据面试真题...

    字节的面试难度一直很高,所以一直是我想攻克的目标,定下这个目标后就去准备收集了几十个字节实际面经,还包括面试前都需要做哪些准备.只能说是工欲善其事必先利其器,经过这些周全的准备,最终的面试还是很顺利的 ...

  4. 字节跳动大数据岗位面经(一面、二面、三面、hr面,base南京)

    一面: 项目经验 二叉树逐层打印 1亿条数据找出前1000条最大的数据 二面: sql优化:谓词下推.优化规则实现 join实现:小表缓存:如果不是大小表的join如何实现? 16进制数相加 三面: ...

  5. 字节跳动大数据开发面试题-附答案

    此面试题来自牛客网友分享的字节跳动应届一面,面试时长一小时. 网友情况:985 本硕. 参考答案由本公众号提供.如有错误,欢迎指正! 以下为面试过程中提问,岗位为大数据开发: 自我介绍+项目介绍 为什 ...

  6. 字节跳动大数据研发面试——自我反省

    一.面试问题 自我介绍balabala- 1.1提问 线程与进程的理解.具体比如- 系统总线怎么理解 网络爬虫的通信过程,需要经历哪些过程 怎么通过链接找到服务器IP的 域名解析怎么理解.TCP/UD ...

  7. 字节青训营第一课之go语言入门的笔记和总结

    有幸参加了字节跳动举办的青训营活动,主要是go语言的编程实践,我将会整理课程的笔记和总结,欢迎关注! 1Go语言简介 由于Go语言有语法简单.高性能等特点,因此国内外各大公司如谷歌.腾讯.字节等都在使 ...

  8. 字节跳动一站式数据治理解决方案及平台架构

    更多技术交流.求职机会.试用福利,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 "一站式数据治理解决方案及平台架构"的分享会分为四个部分展开: 首先,明确数据治理的 ...

  9. 邀您参与 | 阿里巴巴如何扩展 K8s 调度器支持 AI 和大数据任务?

    简介:2020 年 7 月 15 日上午 10:00,<阿里巴巴如何扩展 K8s 调度器支持 AI 和大数据任务?>主题线上网络研讨会即将召开. 随着 Kubernetes 的广泛应用,越 ...

最新文章

  1. 容器网络Calico进阶实践 | 褚向阳
  2. Java实现从Html文本中提取纯文本
  3. 企业计算机能力,以IT企业需求为导向的计算机人才培养模式研究
  4. Winform中实现双击Dev的TreeList在ZedGraph中生成对应颜色的曲线
  5. 【整理】各种语言的API文档
  6. 解决ExcuteFile执行命令时出现“无效字符”的问题
  7. clickhouse安装_初识ClickHouse——安装与入门
  8. Linux——回射服务器多并发(多线程)
  9. hadoop--MapReduce框架原理
  10. javascript布尔值_JavaScript布尔值通过上法庭进行解释
  11. 剑指offer 二叉树的深度
  12. indesign教程,如何在文档中导航页面?
  13. 打乱一个排好序的 list 对象 alist?
  14. windows删除「WIN+R」的历史记录
  15. layui表单基本使用
  16. 如何在Elastic cloud上选择合适的Elasticsearch service
  17. bootstrap+javascript制作体重标准计算器
  18. css中repeat用法,background-repeat 怎么使用
  19. c0604 旋转魔方阵
  20. win7计算机无法连接投影仪,win7系统下投影仪无法输出信号到电脑的解决方法

热门文章

  1. 【分享】heic转换格式工具
  2. oracle如何调试存储过程
  3. 简单的python案例_基于python的最简单jQuery File Upload示例
  4. linux的权限741 652,linux文件目录权限管理
  5. STM32F4_通过RS232实现和PC端通讯
  6. 数据分析 第二篇:数据特征分析(统计量分析)
  7. 摸鱼快报:golang net/http中的雕虫小技
  8. word文档docx解密软件,word文档docx权限密码多少?
  9. Hive Create Table和Load DATA详解
  10. 5天注册破百万,一文详解爆火 ChatGPT 到底是个啥