Apache Flink 漫谈系列 - JOIN 算子
副问题[/!--empirenews.page--]
聊什么 在《Apache Flink 漫谈系列 - SQL概览》中我们先容了JOIN算子的语义和根基的行使方法,先容进程中各人发明Apache Flink在语法语义上是遵循ANSI-SQL尺度的,那么再深思一下传统数据库为啥必要有JOIN算子呢?在实现道理上面Apache Flink内部实现和传统数据库有什么区别呢?本篇将细致的为各人先容传统数据库为什么必要JOIN算子,以及JOIN算子在Apache Flink中的底层实现道理和在现实行使中的优化! 什么是JOIN 在《Apache Flink 漫谈系列 - SQL概览》中我对JOIN算子有过简朴的先容,这里我们以详细实例的方法让各人对JOIN算子加深印象。JOIN的本质是别离从N(N>=1)张表中获取差异的字段,进而获得最完备的记录行。好比我们有一个查询需求:在门生表(学号,姓名,性别),课程表(课程号,课程名,学分)和后果表(学号,课程号,分数)中查询全部门生的姓名,课程名和测验分数。如下: 为啥必要JOIN JOIN的本质是数据拼接,那么假如我们将全部数据列存储在一张大表中,是不是就不必要JOIN了呢?假如然的能将所需的数据都在一张表存储,我想就真的不必要JOIN的算子了,但实际营业中真的能做到将所需数据放到统一张大表内里吗?谜底是否认的,焦点缘故起因有2个: (1)发生数据的源头也许不是一个体系; (2)发生数据的源头是统一个体系,可是数据冗余的极重价钱,迫使我们会遵循数据库范式,举办表的计划。简说NF如下:
虽然尚有 4NF,5NF,不外在现实的数据库计划进程中做到BCNF已经足够了!(并非否认4NF,5NF存在的意义,只是小我私人还没有碰着必然要用4NF,5NF的场景,计划每每会按存储本钱,查询机能等综合身分考量) JOIN种类 JOIN 在传统数据库中有如下分类: (1)CROSS JOIN - 交错毗连,计较笛卡儿积; (2)INNER JOIN - 内毗连,返回满意前提的记录; (3)OUTER JOIN
(4)SELF JOIN - 自毗连,将表查询时辰定名差异的别名。 JOIN语法 JOIN 在SQL89和SQL92中有差异的语法,以INNER JOIN为例声名:
本篇中的后续示例将应用SQL92语法举办SQL的编写,语法如下:
语义示例声名 在《Apache Flink 漫谈系列 - SQL概览》中对JOIN语义有过简朴先容,这里会举办睁开先容。 我们以开篇示例中的三张表:门生表(学号,姓名,性别),课程表(课程号,课程名,学分)和后果表(学号,课程号,分数)来先容各类JOIN的语义。 1. CROSS JOIN 交错毗连会对两个表举办笛卡尔积,也就是LEFT表的每一行和RIGHT表的全部行举办联接,因今天生功效表的行数是两个表行数的乘积,如student和course表的CROSS JOIN功效如下:
(编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |