大数据体系和 SQL的预习 | 青训营笔记

154 阅读2分钟

大数据体系和 SQL的预习 | 青训营笔记

这是我参与「第四届青训营 」笔记创作活动的的第1天

1.大数据体系图

image.png

2.了解 SQL 的基本用法和关系代数基础知识(选择、 投影、连接、集合操作等)

2.1.选择(Selection)

在这里插入图片描述

  • 用于在关系R中选择满足给定条件的各个元组
  • C:选择条件,是一个逻辑表达式
  • 结果为只包含R中某些元组的新的关系
-- σ5 ='IS' (Student)
σ[列名1,...,列名n]|[列名下标1,...,列名下标n]=[你的条件值](表名)

2.2.投影(projection)

img

  • 用于从R中选择出若干属性列组成新的关系(默认去重)
  • L为R中的属性列表
  • 结果为只包含R中某些列的新的关系
  • 结果要去掉重复元组
-- 数据库的下标是从1开始的
π[列名1,...,列名n]|[列名下标1,...,列名下标n](表名)

2.3.笛卡尔积(Product)
  • R关系: n个属性, k1个元组

  • S关系: m个属性, k2个元组

  • R x S

    • 将R中的每个元组t1和S中的每个元组t2配对连接

    • 列数: n+m

      • 前n列是关系R的一个元组t1
      • 后m列是关系S的一个元组t2
    • 行数:k1× k2

    • 当R和S中有重名属性A时,则采用R.A和S.A分别命名对应的属性列

2.4.连接(Join)

连接有三种:θ连接、自然联接、外连接。

  • θ连接

    • 连接也称为θ连接,关系R与关系S的连接运算是从两个关系的笛卡尔积中选取属性间满足一定条件的元组形成一个新的连接。这个条件为θ(比较运算符,如>、<、=)。
  • 自然连接

    • 是一种特殊的等值连接,比较两个关系中分量相同的属性组,并且在结果中把重复的属性列去掉,最后只保留属性组中分量相同的元组。
  • 左连接

    • 在自然连接的基础上加上左边表上不包含自然连接中所含元组(行)的元组。
  • 右连接

    • 在自然连接的基础上加上右边表上不包含自然连接中所含元组(行)的元组。
  • 外连接

    • 左连接+右连接

3.了解编译原理相关的基础知识

3.1.词法分析(Lexical Analysis)
  • 编程语言的语句,由一堆堆的单词组成——比如变量类型名、变量名、函数名、值、符号等。既然我们要让机器来分析源程序然后编译,那么就需要首先让计算机能够明白我们写的语句是什么意思,而理解语句的第一步就是理解每个词。所谓词法分析,进行的工作就是让计算机识别单词。
3.2.语法分析(Syntactic Analysis)
  • 完成词法分析,就要通过语法分析来识别语句的结构。
3.3.抽象语法树(Abstract Syntax Tree,AST)
  • 在计算机科学中,抽象语法树(Abstract Syntax Tree,AST),或简称语法树(Syntax tree),是源代码语法架构的一种抽象表示。它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。之所以说语法是“抽象”的,是因为这里的语法并不会表示出真是语法中出现的每个细节。比如嵌套括号被隐含在树的结构中,并没有以节点的形式呈现;二类似于 if-condition-then这样的条件跳转语句,可以使用带有三个分支的节点来表示。和抽象语法树相对的是具体语法树(通常称作分析树)。一般的,在源代码的翻译和编译过程中,语法分析器创建出分析树,然后从分析树生成AST。一旦AST被创建出来,在后续的处理过程中,比如语义分析阶段,会添加一些信息。

4.了解 SQL 里的执行计划

4.1.逻辑计划(Logical Plan)

从SQL语句经过 SparkSqlParser 解析成 Unresolved LogicalPlan ,到最终优化成 Optimized LogicalPlan ,这个流程经历了3个阶段。

img

  • (1)语法中的 Context 节点转换成 对应的 LogicalPlan 节点,成为一棵未解析的逻辑算子树 (Unresolved LogicalPlan), 此时的逻辑算子树是最初形态。
  • (2)由 Analyzer将一系列的规则在 Unresolved LogicalPlan 上,对树上的节点绑定各种数据信息,生成解析后的逻辑算子树 (Analyzer LogicalPlan) 。
  • (3)Optimizer将优化rule作用在 (2)的结果上,改写低效结构,生成优化后的逻辑算子树(Optimized LogicalPlan)。
4.2.物理计划(Physical Plan)
  • 在物理计划阶段,Spark SQL获取一个逻辑计划,并使用与Spark执行引擎匹配的物理操作来生成一个或多个物理计划,然后使用基于代价的模型在这个多个物理计划中选择最优的那个。目前,基于代价的优化仅用于join操作:对于join中较小的表,Spark SQL使用broadcast join来避免shuffle。
  • 物理计划也执行基于规则的物理优化,例如将查询或过滤下推到Spark map端。此外,他还可以将操作从逻辑计划下推到支持谓词下推的数据源端。
4.3.分布式执行计划(Plan Fragment)
4.4.连接树(Join Tree)
  • 和查询图类似,连接树是将关系名和连接操作的代数表达式的直观表示。它是一个二叉树,所有叶子结点都是不同的关系,而内部则是连接操作(或者点乘操作)。树的边代表了一种输入/输出的关系。
  • 根据形状的不同连接树也分为好几种,如下图所示:

img

  • 图解如下:

    • 左深树(left-deep tree)的特点是每个连接操作与一个关系作为另一个连接操作的输入时,该连接操作永远在左边(根结点除外)。右深连接树则反过来,相当于左深树的镜像。
    • zig-zag树的特点是至少有一个输入是relation,它可能包含左深子树或右深子树。
    • 而bushy树没什么限制,所以它可能包含刚才提到的三种形状。