Hive SQL练习题库
### Hive SQL练习题库知识点详解 #### 一、Hive SQL概述 Hive 是一个基于 Hadoop 的数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的 SQL 查询功能,使不熟悉 MapReduce 的用户可以利用 SQL 语言进行数据查询,大大提升了数据分析的效率。 #### 二、环境搭建与表的创建 在开始练习之前,我们需要构建一个基本的数据处理环境,并定义好数据表。这部分主要包括以下内容: - **创建表**:通过 SQL 语句创建不同类型的表来存储数据。 - **加载数据**:将外部文件中的数据加载到 Hive 表中。 ##### 1. 创建表 根据题目描述,我们需要创建四个表:`student_info`(学生表)、`course_info`(课程表)、`teacher_info`(教师表)以及 `score_info`(成绩表)。 - **学生表** (`student_info`) - `stu_id` (学生 ID) - `stu_name` (学生姓名) - `birthday` (出生日期) - `sex` (性别) ```sql DROP TABLE IF EXISTS student_info; CREATE TABLE IF NOT EXISTS student_info ( stu_id STRING COMMENT '学生 id', stu_name STRING COMMENT '学生姓名', birthday STRING COMMENT '出生日期', sex STRING COMMENT '性别' ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE; ``` - **课程表** (`course_info`) - `course_id` (课程 ID) - `course_name` (课程名称) - `tea_id` (教师 ID) ```sql DROP TABLE IF EXISTS course_info; CREATE TABLE IF NOT EXISTS course_info ( course_id STRING COMMENT '课程 id', course_name STRING COMMENT '课程名', tea_id STRING COMMENT '任课老师 id' ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE; ``` - **教师表** (`teacher_info`) - `tea_id` (教师 ID) - `tea_name` (教师姓名) ```sql DROP TABLE IF EXISTS teacher_info; CREATE TABLE IF NOT EXISTS teacher_info ( tea_id STRING COMMENT '老师 id', tea_name STRING COMMENT '学生姓名' ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE; ``` - **成绩表** (`score_info`) - `stu_id` (学生 ID) - `course_id` (课程 ID) - `score` (成绩) ```sql DROP TABLE IF EXISTS score_info; CREATE TABLE IF NOT EXISTS score_info ( stu_id STRING COMMENT '学生 id', course_id STRING COMMENT '课程 id', score INT COMMENT '成绩' ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE; ``` ##### 2. 数据准备 接下来,需要准备好数据文件,并将其放置到指定目录下。 - **创建目录** ```bash mkdir /opt/module/data ``` - **准备数据文件** 将预先准备好的 `.txt` 文件放置到 `/opt/module/data` 目录下。 - **数据样例** 例如,在 `student_info.txt` 中,包含以下数据: ``` 001,彭于晏,1995-05-16,男 002,胡歌,1994-03-20,男 ... ``` 这些数据文件中包含了所有表所需的基本信息,用于后续的数据加载操作。 #### 三、数据加载 完成表的创建后,接下来需要将数据文件中的数据加载到对应的表中。这部分主要涉及如何使用 Hive 的 `LOAD DATA INPATH` 命令。 - **加载学生数据** ```sql LOAD DATA INPATH '/opt/module/data/student_info.txt' INTO TABLE student_info; ``` - **加载课程数据** ```sql LOAD DATA INPATH '/opt/module/data/course_info.txt' INTO TABLE course_info; ``` - **加载教师数据** ```sql LOAD DATA INPATH '/opt/module/data/teacher_info.txt' INTO TABLE teacher_info; ``` - **加载成绩数据** ```sql LOAD DATA INPATH '/opt/module/data/score_info.txt' INTO TABLE score_info; ``` #### 四、SQL查询练习 有了上述的基础,我们可以开始进行一些基础的 SQL 查询练习,如查询某个学生的全部信息、查询某门课程的成绩分布等。这部分主要涉及 SQL 查询的基础语法,包括 SELECT、FROM、WHERE 等子句的使用。 - **查询所有学生的姓名和生日** ```sql SELECT stu_name, birthday FROM student_info; ``` - **查询某门课程的所有成绩** ```sql SELECT score FROM score_info WHERE course_id = '01'; ``` - **联表查询** 结合使用多个表进行更复杂的查询,例如查询每个学生的成绩及对应的课程名称和教师姓名。 ```sql SELECT s.stu_name, c.course_name, t.tea_name, sc.score FROM student_info s JOIN score_info sc ON s.stu_id = sc.stu_id JOIN course_info c ON c.course_id = sc.course_id JOIN teacher_info t ON t.tea_id = c.tea_id; ``` 通过以上的练习,初学者可以逐步掌握 Hive SQL 的基本操作,并为进一步的学习打下坚实的基础。