2024年大数据最新一文速学-玩转SQL之执行顺序,单表自连接操作和用法_表自链接(1),大数据开发面试大数据开发基础

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

众所周知要玩转SQL查询光靠那个几个查询关键字是远远不够的,SQL作为数据库的存在,往往存在多个物理表或者映射,有时候存在内容吃紧的情况,或者是查询结果表存在多个指标。这需要我们进行单表操作,实现统计不同的指标或者不同条件查询结果进行计算。要进行指标提取或者是创建新指标,推荐是使用自连接的方法可以快速从原始表根据相关指标,如:时间、主键等相关联相同数值的特征连接。下面不再废话让我们一步一步实现。


一、基础前提

首先我们需要了解,任何的编程语言都有一定的共性。但是SQL语言的话,对我们开发者经常使用的Python和JAVA而言属实操作僵硬,不像Pandas的DataFrame数据类型那样操作灵活。让我们感觉写SQL语言并没有那种如鱼得水的畅快感,这是有原因的:SQL 是一种声明式语言。

从我们开始学编程基本都是学的C语言这种强面向过程结构化语言,逐条执行,按条件查询检索后再执行这样的思维。而对于SQL语言来讲,它的执行顺序并没有我们想的过程一步一条执行。

SQL语句的执行顺序跟其语句的语法顺序是不一样的

SQL执行顺序:

(1)FROM
<表名> # 选取表,将多个表数据通过笛卡尔积变成一个表。
(2)ON
<筛选条件> # 对笛卡尔积的虚表进行筛选
(3)JOIN <join, left join, right join…>
<join表> # 指定join,用于添加数据到on之后的虚表中,例如left join会将左表的剩余数据添加到虚表中
(4)WHERE
<where条件> # 对上述虚表进行筛选
(5)GROUP BY
<分组条件> # 分组
(6)<SUM()等聚合函数> # 用于having子句进行判断,在书写上这类聚合函数是写在having判断里面的
(7)HAVING
<分组筛选> # 对分组后的结果进行聚合筛选
(8)SELECT
<返回数据列表> # 返回的单列必须在group by子句中,聚合函数除外
(9)DISTINCT # 数据除重
(10)ORDER BY
<排序条件> # 排序,如非必要尽量不用
(11)LIMIT
<行数限制>

SQL语句顺序:

(8) SELECT (9)DISTINCT < 去重列 >
(1) FROM < 左表 >
(3) < 连接类型 > JOIN < 右表 >
(2) ON <连接条件>
(4) WHERE < 筛选条件 >
(5) GROUP BY < 分组列 >
(6) WITH {CUBE|ROLLUP}
(7) HAVING < 分组筛选 >
(10) ORDER BY < 排序列 >
(11) LIMIT < 行数限制 >
注:这里大家注意,(4)WHERE 筛选的是连接后的新表。

通过SQL的语法顺序和执行顺序很容易就看出,这和我们一步一步一个语句实现一个效果不同。要是我们按照面向过程来编程。那肯定首先是from先拿出表格,再考虑是否根据条件连接其他表格实现多表格联合处理。但是我们写的时候不能这么写,所以会感觉比较不适。了解了原理之后我们便可真正开始进行单表操作了。

二、单表操作

1.自连接

创建

为了方便演示这里创建一张value_test:

CREATE TABLE `value_test` (
  `code` int(20) NOT NULL,
  `time` bigint(124) NOT NULL,
  `value` bigint(124) NOT NULL,
  PRIMARY KEY (`value`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;

插入数据:

INSERT INTO value_test(`code`,time,`value`) VALUES('1','20220601','101');
INSERT INTO value_test(`code`,time,`value`) VALUES('1','20220602','102');
INSERT INTO value_test(`code`,time,`value`) VALUES('1','20220603','103');
INSERT INTO value_test(`code`,time,`value`) VALUES('1','20220604','104');
INSERT INTO value_test(`code`,time,`value`) VALUES('1','20220605','105');
INSERT INTO value_test(`code`,time,`value`) VALUES('1','20220606','106');
INSERT INTO value_test(`code`,time,`value`) VALUES('1','20220607','107');
INSERT INTO value_test(`code`,time,`value`) VALUES('2','20220601','201');
INSERT INTO value_test(`code`,time,`value`) VALUES('2','20220602','202');
INSERT INTO value_test(`code`,time,`value`) VALUES('2','20220603','203');
INSERT INTO value_test(`code`,time,`value`) VALUES('2','20220604','204');
INSERT INTO value_test(`code`,time,`value`) VALUES('2','20220605','205');
INSERT INTO value_test(`code`,time,`value`) VALUES('2','20220606','206');
INSERT INTO value_test(`code`,time,`value`) VALUES('2','20220607','207');
INSERT INTO value_test(`code`,time,`value`) VALUES('3','20220601','301');
INSERT INTO value_test(`code`,time,`value`) VALUES('3','20220602','302');
INSERT INTO value_test(`code`,time,`value`) VALUES('3','20220603','303');
INSERT INTO value_test(`code`,time,`value`) VALUES('3','20220604','304');
INSERT INTO value_test(`code`,time,`value`) VALUES('3','20220605','305');
INSERT INTO value_test(`code`,time,`value`) VALUES('3','20220606','306');
INSERT INTO value_test(`code`,time,`value`) VALUES('3','20220607','307');

得到了这张表格:

自连接

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

(https://bbs.csdn.net/topics/618545628)**

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

Spark是一个快速通用的集群计算框架,它可以处理大规模数据,并且具有高效的内存计算能力。Spark可以用于各种计算任务,包括批处理、流处理、机器学习等。本文将带你了解Spark计算框架的基本概念和使用方法。 一、Spark基础概念 1. RDD RDD(Resilient Distributed Datasets)是Spark的基本数据结构,它是一个分布式的、可容错的、不可变的数据集合。RDD可以从Hadoop、本地文件系统等数据源中读取数据,并且可以通过多个转换操作(如map、filter、reduce等)进行处理。RDD也可以被持久化到内存中,以便下次使用。 2. Spark应用程序 Spark应用程序是由一个驱动程序和多个执行程序组成的分布式计算应用程序。驱动程序是应用程序的主要入口点,它通常位于用户的本地计算机上,驱动程序负责将应用程序分发到执行程序上并收集结果。执行程序是运行在集群节点上的计算单元,它们负责执行驱动程序分配给它们的任务。 3. Spark集群管理器 Spark集群管理器负责管理Spark应用程序在集群中的运行。Spark支持多种集群管理器,包括Standalone、YARN、Mesos等。 二、Spark计算框架使用方法 1. 安装Spark 首先需要安装Spark,可以从Spark官网下载并解压缩Spark安装包。 2. 编写Spark应用程序 编写Spark应用程序通常需要使用Java、Scala或Python编程语言。以下是一个简单的Java代码示例,用于统计文本文件中单词的出现次数: ```java import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaRDD; import org.apache.spark.api.java.JavaSparkContext; import java.util.Arrays; import java.util.Map; public class WordCount { public static void main(String[] args) { SparkConf conf = new SparkConf().setAppName("WordCount").setMaster("local"); JavaSparkContext sc = new JavaSparkContext(conf); JavaRDD<String> lines = sc.textFile("input.txt"); JavaRDD<String> words = lines.flatMap(line -> Arrays.asList(line.split(" ")).iterator()); Map<String, Long> wordCounts = words.countByValue(); for (Map.Entry<String, Long> entry : wordCounts.entrySet()) { System.out.println(entry.getKey() + " : " + entry.getValue()); } sc.stop(); } } ``` 3. 运行Spark应用程序 将编写好的Spark应用程序打包成jar包,并通过以下命令运行: ```bash spark-submit --class WordCount /path/to/wordcount.jar input.txt ``` 其中,--class参数指定应用程序的主类,后面跟上打包好的jar包路径,input.txt是输入文件的路径。 4. 查看运行结果 Spark应用程序运行完毕后,可以查看应用程序的输出结果,例如上述示例中的单词出现次数。 以上就是Spark计算框架的基本概念和使用方法。通过学习Spark,我们可以更好地处理大规模数据,并且提高计算效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值