大数据软件基础(2)—— Java、SQL

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
简介: 大数据软件基础(2)—— Java、SQL

二、Java基础

 在Hadoop为主导的大数据处理技术生态圈的编程语言中,Java语言有不可撼动的地位。Hadoop 是用Java写的,不仅分布式编程框架 Map/Reduce 原生支持Java, 而且Hbase、Spark等都支持Java API 开发。学习和掌握Java相关知识,对学习大数据相关技术十分重要。本节就Java概念(如面向对象和泛型、Java数据结构、反射、内部类等)进行概述。

(一)面向对象与泛型

1、类继承

  在面向对象语言中,类继承是面向对象程序设计不可缺少的一部分。 类继承实现了代码复用,使得代码结构更清晰。 当一个类继承另一个类,不仅可以获取该类的一些方法,还可以在此基础上定义自身的方法,从而能够在已存在的类的基础上构建一个新类。

2、接口

       接口以interface声明。在Java语言中,接口是一个抽象类型,是抽象方法的组合。与Java中的类不同,接口主要用来描述类具有的功能,并不涉及每个功能的具体实现。当类实现接口时,必须实现接口中的所有方法。若只想实现接口中的部分方法,可使用抽象类。从程序员的角度,可以把接口理解为抽象类(虽然它们在语法上有诸多不同)。接口中的方法必须全部在具体的类中实现。接口的实现一般分为两步:

(1)使用implements关键字将类声明为实现指定的接口;

(2)在类中实现接口已定义好的所有方法。

       接口也可以通过extends关键字继承父接口,并支持多继承。java.io 包字节流 InputStream 和 OutStream 都实现了 Closeable 接口,用来关闭数据源或者目标的 io 流,释放对象保存的资源。

3、泛型

       泛型是Java SE5中引入的一种重用机制。泛型实现了参数类型的概念,使代码可以应用于多种类型。与Java中指定变量的参数类型不同,泛型将所操作的数据类型指定为一个参数,即类型参数,使算法可以同时操作多种数据类型,同时能够在编译时检测到非法类型。使用类型参数允许暂时不指定参数的具体类型,而是稍后再决定具体类型。

       Java语言中应用了泛型技术的方法,称为泛型方法,拥有泛型方法的类可以不是泛型类。泛型方法可以放在普通类中,也可以放在泛型类中,泛型类与泛型方法没有直接的关系。类型参数的声明用尖号表示,尖括号内可以包含一个或多个类型参数,类型参数只能使用引用类型,不能用 int、float 等原始类型替换。

(二)集合类

   Java集合框架的集合类,有时候称之为容器。容器的种类有很多种,比如ArrayList、LinkedList、HashSet等。每种容器都有自己的特点,比如,ArrayList底层维护的是一个数组;LinkedList是链表结构;HashSet依赖的是哈希表,每种容器都有自己特有的数据结构。在Map/Reduce编程中,在计算节点传输键值数据的传输是一种集合,理解Java语言中Set、Map和List有助于对Map/Redcue数据传递程序的理解。

1、Set

       Set是一种简单的集合,继承Java中的Collection接口。Set中的元素不能重复,后放入的元素会将之前重复的元素覆盖,但Set中的元素没有特定顺序。

2、Map

       Map也被称为关联数组,用于存储键值对结构的数据,这种数据结构就像字典一样,在某些对象与另外一些对象之间建立联系,即在“键”与“值”之间建立联系,在代码中能够根据键值对中的键来查找对应的值。键值对在MapRedcue编程和Spark编程中会多次使用。Map接口主要有如下两个实现类。

(1)HashMap:HashMap类存取数据集合中元素的方式是根据哈希码的算法计算得来的,能够快速查找一个键,具有存取速度快的特点。

(2)TreeMap:TreeMap类Map接口中的元素按序排放,要求放入集合中的元素是可排序的。

3、List

       List又称列表,对Java中的Collection接口进行了扩充,其中的元素以线性方式存储,在List中的元素根据放入的顺序不同存放在不同的位置,并且元素可以重复。 除了关心不同集合类型的数据结构不同之外,我们还要关心数据集合本身是否支持自动排序和是否允许重复序列两个问题。为了使对容器内元素的操作更为简单,Java引入了迭代器模式。把访问逻辑从不同类型的集合类中抽取出来,从而避免向外部暴露集合的内部结构。

(三)内部类与匿名类

在Java中,内部类定义在另一个类的内部,属于这个类的一部分,外面的类称为外部类或外围类。由于内部类在外部类的内部,当实例化内部类时,该内部类会获取外部类对象的引用,该引用使得实例化的内部类对象可以访问外部类的成员。所以内部类可以自由访问外部类的数据,包括私有数据。由于内部类属于外部类的一部分,其他类无法直接访问该内部类。在编译时,内部类和外部类属于两个完全不同的类,会产生两个不同的 .class 文件。内部类一般分为四种,成员内部类、局部内部类、匿名内部类和静态内部类。

1、成员内部类

       成员内部类是一种最基础的内部类,是外部类所有成员中的一个。成员内部类可以访问外部类的所有成员属性和成员方法。但是如果外部类要想访问成员内部类,必须先创建一个成员内部类的对象,再通过成员内部类的对象来访问。成员内部类可以像外部类中的变量和方法一样拥有各种访问权限,包括private访问权限、protected访问权限、public访问权限及包访问权限。

2、局部内部类

       局部内部类有两种情况,一种是定义在外部类的一个方法的内部,另一种情况是定义在外部类一个作用域的内部,只能在该方法内部或者该作用域内部被访问,并且局部内部类不能有private、protected、public或者static修饰符。

3、匿名内部类

       匿名内部类比较常见,它直接使用new关键字来隐式地生成一个类或者接口的对象,并同时实现该类或者接口中的方法。匿名内部类的使用方式有两种:实现一个接口,并实现该接口定义的方法,或者继承一个父类,重写其方法。

4、静态内部类

       静态内部类是定义在类的内部,并且使用static关键字修饰的内部类,静态内部类又称为嵌套内部类。与一般内部类不同,静态内部类没有对外围内部类的引用,所以它无法使用外部类的非static类型的成员变量或方法。静态内部类不需要通过外部类来创建,可以直接创建静态内部类的对象。

(四)反射

       Java的反射机制允许Java在程序运行过程中获取程序的某些信息,通过反射机制,可以在程序运行时获取程序内部的接口、变量等信息,还可以在运行过程中实例化对象,这些操作在编译期无法得知,不需要程序预先编译,都是在程序运行时进行的。

     Java反射机制广泛运用于开发各种通用框架中,它允许程序在运行过程中根据不同需求调用不同方法,加载不同的对象和类,使得程序具有更高的灵活性,降低了类之间的耦合性。在Java中,实现反射的类一般在java.lang.reflect包里,反射所能实现的功能包括获取Class对象、捕获异常、利用反射分析类的能力,在运行过程中利用反射分析对象等。

三、SQL语言基础

    1986年10月,美国国家标准协会对SQL进行了规范,以此作为关系式数据库管理系统的标准语言(ANSI X3. 135-1986)。不过不同的数据库系统在其实践过程中都对SQL规范作了某些改编和扩充。Hadoop生态圈的 Hive、Spark 等也仿照SQL语言提出了自己的类SQL语言,用于数据的查询和分析等。

定义:结构化查询语言(Structured Query Language,SQL)是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。

基本操作:创建数据表、在数据小添加信息、在数据表查询信息、在数据表修改信息、在数据表删除信息、修改表的结构。

(一)创建数据表

语法格式:CREATE table 表名 (数据名称 数据类型,数据名称 数据类型,…);

创建一个学生信息表,学生属性有学号、姓名、性别、年龄:

CREATE table student (sid int, sname varchar(20), ssex varchar(2), sage int);

(二) 在数据表添加信息

语法格式:INSERT INTO 表名(数据名称1,数据名2,…) VALUES(字段值1,字段值2, …);

1、插入所有字段,一次性加入一条完整的信息,插入的字段值的个数和数据表的属性个数相同。

INSERT INTO student(sid, sname, ssex, sage) VALUES(2017001, '小明', '男', 22);

2、向数据表student插入sid为2017001,sname为小明,ssex为男,sage为22的一条记录。此时可以省student后面的属性,等同于

INSERT INTO student VALUES(2017001, '小明', '男', 22);

3、 插入部分字段,在表名后面添加需要插入的属性名,在VALUES后面添加对应的值:

INSERT INTO student(sid, sname) VALUES(2017002, '小明');

(三)在数据表查询信息

语法格式:SELECT 数据名称 FROM 表名 WHERE 数据名称 = 数据值;

1、简单信息查询

(1)查询学生表中的所有学号(可以添加多个属性,用逗号隔开),语法格式为:

SELECT sid FROM student;

(2)在查询的同时,也可以用AS为数据名称制定别名,例如:

SELECT sid AS snumber FROM student;

(3)查询数据表student中学号为2017001的学生信息,语法格式为:

SELECT * FROM student WHERE sid=2021001;

2、数据库表的聚合查询和条件查询

(1)常用的聚合函数有:max()、min()、sum()、avg()、count()。

(2)常用的比较条件有:<、>、>=、<=、== 、<>!=,例:

SELECT * FROM student WHERE sage>20;

(3)常用的逻辑条件有:and、or,例:

SELECT * FROM student WHERE sid=2017001 OR sname='小王';

(4)常用的判空条件(null空字符串):is null、is not null,例:

SELECT * FROM student WHERE sage IS NULL;

(5)常用的模糊条件(like) 例:

SELECT * FROM student WHERE sname LIKE '小_';(_表示一个字或字符)
SELECT * FROM student WHERE sname LIKE '小%';(%表示不限制字符个数)

(四)在数据表修改信息

1、修改所有数据,一般这种情况比较少用。例:

UPDATE student SET sage=12;

2、带条件的修改

UPDATE student SET sage=12 WHERE id=1; 在SET后面也可以进行多个数据名称的修改。例:

UPDATE student SET sage=12, ssex=’女’WHERE id=1;

(五)在数据表删除信息

语法格式:DELETE FROM 表名 WHERE 数据名称 = 数据值;

删除特定条件的某条数据(不加WHERE进行限制就是删除所有数据),例:

DELETE FROM student WHERE id=2021001;

(六)修改表的结构

1、添加一个字段,在表中增加一列属性。例:

ALTER TABLE student ADD column sclass varchar(20);

2、删除一个字段,在表中删除一列属性。例:

ALTER TABLE student DROP column sclass;

3、修改表中某一个字段的类型。例:

ALTER TABLE student MODIFY (column) sname varchar(50);

4、修改表中某一个字段的名称。例:

ALTER TABLE student CHANGE (column) sname name varchar(20);

5、修改数据表的名称。例:

ALTER TABLE student RENAME(to)people;


相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
目录
相关文章
|
11天前
|
缓存 算法 Java
Java 实现的局域网管控软件的性能调优
局域网管控软件在企业网络管理中至关重要,但随着网络规模扩大和功能需求增加,其性能可能受影响。文章分析了数据处理效率低下、网络通信延迟和资源占用过高等性能瓶颈,并提出了使用缓存、优化算法、NIO库及合理管理线程池等调优措施,最终通过性能测试验证了优化效果,显著提升了软件性能。
27 1
|
1天前
|
SQL 数据采集 监控
局域网监控电脑屏幕软件:PL/SQL 实现的数据库关联监控
在当今网络环境中,基于PL/SQL的局域网监控系统对于企业和机构的信息安全至关重要。该系统包括屏幕数据采集、数据处理与分析、数据库关联与存储三个核心模块,能够提供全面而准确的监控信息,帮助管理者有效监督局域网内的电脑使用情况。
10 2
|
21天前
|
分布式计算 Java 大数据
大数据-147 Apache Kudu 常用 Java API 增删改查
大数据-147 Apache Kudu 常用 Java API 增删改查
24 1
|
22天前
|
SQL 消息中间件 分布式计算
大数据-143 - ClickHouse 集群 SQL 超详细实践记录!(一)
大数据-143 - ClickHouse 集群 SQL 超详细实践记录!(一)
53 0
|
22天前
|
SQL 大数据
大数据-143 - ClickHouse 集群 SQL 超详细实践记录!(二)
大数据-143 - ClickHouse 集群 SQL 超详细实践记录!(二)
48 0
|
22天前
|
SQL 大数据 API
大数据-132 - Flink SQL 基本介绍 与 HelloWorld案例
大数据-132 - Flink SQL 基本介绍 与 HelloWorld案例
39 0
|
22天前
|
分布式计算 Java 大数据
大数据-122 - Flink Time Watermark Java代码测试实现Tumbling Window
大数据-122 - Flink Time Watermark Java代码测试实现Tumbling Window
28 0
|
22天前
|
SQL 分布式计算 大数据
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(一)
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(一)
33 0
|
22天前
|
SQL 分布式计算 算法
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(二)
大数据-97 Spark 集群 SparkSQL 原理详细解析 Broadcast Shuffle SQL解析过程(二)
61 0
|
22天前
|
SQL 分布式计算 Java
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
23 0