HIVE——数据仓库

分布式的数据仓库,结构化的数据文件映射为一张表,并提供类SQL查询功能。Hive的设计目的是让精通SQL技能但Java编程技能相对较弱的分析师能够对存放在HDFS中的大规模数据集执行查询

本质是:将HQL转化成MapReduce程序

1)Hive处理的数据存储在HDFS

2)Hive分析数据底层的实现是MapReduce

3)执行程序运行在Yarn上

Hive集群安装(基于Mysql)

1)安装jdk(略)

2)安装hadoop(略)

3)安装mysql数据库

  1. //下载wget
  2. yum install wget
  3. wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
  4. [root@hadoopNode1 soft]# rpm -ivh mysql-community-release-el7-5.noarch.rpm
  5. //下载Mysql服务
  6. [root@hadoopNode1 soft]# yum install mysql-server
  7. //启动服务
  8. [root@hadoopNode1 soft]# systemctl start mysqld
  9. //开机自启
  10. [root@hadoopNode1 soft]# systemctl enable mysqld #启用系统服务

初始化root用户

  1. mysql -u root
  2. mysql>use mysql;
  3. mysql> update user set password=password('123456') where user='root'; //新密码为123456
  4. mysql> select host,user from user;
  5. //赋予权限
  6. mysql> GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY "123456";
  7. //更新权限
  8. mysql> flush privileges;
  9. mysql> exit;

4)mysql数据库增加hive用户,并授权

  1. mysql> create user 'hive' identified by '123456';
  2. mysql> CREATE DATABASE hive;
  3. mysql> use hive;
  4. mysql> GRANT ALL PRIVILEGES ON hive.* TO 'hive'@'%' IDENTIFIED BY '123456';
  5. mysql>GRANT ALL PRIVILEGES ON hive.* TO 'hive'@'hadoop1' IDENTIFIED BY '123456'; //写为自己的集群的mysql所在节点
  6. mysql>GRANT ALL PRIVILEGES ON hive.* TO 'hive'@'localhost' IDENTIFIED BY '123456';
  7. mysql> flush privileges;
  8. mysql>exit
  9. //重启服务
  10. systemctl restart mysqld

验证授权:

select host,user from user;

5)验证MYSQL配置正确

在windows下登陆MySQL

  1. tar包:
  1. [ambow@hadoopNode1 hive-2.3.2]$ tar -zxvf ~/soft/hive-1.1.0-cdh5.14.2.tar.gz -C ~/app/

7)配置环境变量

修改.bash_profile文件

HIVE_HOME

PATH

  1. HIVE_HOME=/home/ambow/app/hive-1.1.0-cdh5.14.2
  2. JAVA_HOME=/home/ambow/app/jdk1.8.0_112
  3. HADOOP_HOME=/home/ambow/app/hadoop-2.6.0-cdh5.14.2
  4. PATH=$PATH:$HOME/.local/bin:$HOME/bin:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin
  5. export PATH
  6. export JAVA_HOME
  7. export HADOOP_HOME
  8. export HIVE_HOME

8)修改配置文件:

(1)进入HIVE_HOME/conf目录下,复制hive-env.sh.template

$>cp hive-env.sh.template hive-env.sh

$>vi hive-env.sh

修改:HADOOP_HOME=/home/ambow/app/hadoop

export HIVE_CONF_DIR=/home/ambow/app/hive-1.1.0-cdh5.14.2/conf

(2)进入HIVE_HOME/conf目录下,编辑hive-site.xml

  1. [ambow@hadoopNode1 conf]$ vi hive-site.xml

hive-1.1.0-cdh5.14.2版本:

  1. <?xml version="1.0"?>
  2. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
  3. <configuration>
  4. <property>
  5. <name>javax.jdo.option.ConnectionURL</name>
  6. <value>jdbc:mysql://hadoop1:3306/hive?createDatabaseIfNotExist=true</value>
  7. </property>
  8. <property>
  9. <name>javax.jdo.option.ConnectionDriverName</name>
  10. <value>com.mysql.jdbc.Driver</value>
  11. </property>
  12. <property>
  13. <name>javax.jdo.option.ConnectionUserName</name>
  14. <value>root</value>
  15. </property>
  16. <property>
  17. <name>javax.jdo.option.ConnectionPassword</name>
  18. <value>123456</value>
  19. </property>
  20. <property>
  21. <name>hive.cli.print.current.db</name>
  22. <value>true</value>
  23. </property>
  24. <property>
  25. <name>hive.cli.print.header</name>
  26. <value>true</value>
  27. </property>
  28. </configuration>

9)将MySQL的连接驱动包拷贝至HIVE_HOME/lib下

wget https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.27/mysql-connector-java-5.1.27.jar

10)启动hadoop集群

  1. start-all.sh

11)启动hive客户端 验证

HIVE基本数据类型

Hive数据类型 Java数据类型 长度 例子
TINYINT byte 1byte有符号整数 20
SMALINT short 2byte有符号整数 20
INT int 4byte有符号整数 20
BIGINT long 8byte有符号整数 20
BOOLEAN boolean 布尔类型,true或者false TRUE FALSE
FLOAT float 单精度浮点数 3.14159
DOUBLE double 双精度浮点数 3.14159
STRING string 字符系列。可以指定字符集。可以使用单引号或者双引号。 ‘now is the time’ “for all good men”
TIMESTAMP 时间类型
BINARY 字节数组
VARCHAR 可变长度字符串
CHAR 固定长度字符串
DATE date 日期
decimal bigdecima 任意精度有符号小数

HIVE基本用法练习

一、数据仓库基本操作

1.创建’校园教育数据仓库’

  1. 创建数据仓库
  2. CREATE DATABASE school_edu_base;

2.在school_edu_base数据仓库下分别创建学生表、课程表、教师表、成绩表,表结构如下:

1.学生表(student)

字段 类型 说明
s_id String 学生id
s_name String 姓名
s_birth String 出生日期
s_sex String 性别
s_age String 年龄

2.课程表(curriculum)

字段 类型 说明
c_id String 课程id
c_name String 课程名称
t_id String 教师id

3.教师表(Teacher)

字段 类型 说明
t_id String 教师id
t_name String 教师姓名

4.成绩表(Score)

字段 类型 说明
s_id String 学生id
c_id String 课程id
s_score String 成绩
  1. 选择使用的数据仓库
  2. USE school_edu_base;
  3. 创建学生表
  4. create table `Student` (
  5. `s_id` string COMMENT 'id',
  6. `s_name` string COMMENT '姓名',
  7. `s_birth` string COMMENT '出生日期',
  8. `s_sex` string COMMENT '性别',
  9. `s_age` int COMMENT '年龄'
  10. )row format delimited fields terminated by '\t';
  11. 创建课程表
  12. create table `curriculum` (
  13. `c_id` string COMMENT '课程id',
  14. `c_name` string COMMENT '课程名称',
  15. `t_id` string COMMENT '教师id'
  16. )row format delimited fields terminated by '\t';
  17. 创建教师表
  18. create table `Teacher` (
  19. `t_id` string COMMENT '教师id',
  20. `t_name` string COMMENT '教师姓名'
  21. )row format delimited fields terminated by '\t';
  22. 创建成绩表
  23. create table `Score` (
  24. `s_id` string COMMENT '学生id',
  25. `c_id` string COMMENT '课程id',
  26. `s_score` string COMMENT '成绩'
  27. )row format delimited fields terminated by '\t';

3.分别给学生表、课程表、教师表、成绩表添加相应数据

  1. 3.1、在/usr/local/下 创建student.txt文件 准备学生数据
  2. 01 赵雷 1990-01-01 20
  3. 02 钱电 1990-12-21 20
  4. 03 孙风 1990-05-20 20
  5. 04 李云 1990-08-06 20
  6. 05 周梅 1991-12-01 19
  7. 06 吴兰 1992-03-01 18
  8. 07 郑竹 1989-07-01 21
  9. 08 王菊 1990-01-20 20
  10. 3.2、添加学生数据
  11. load data local inpath '/usr/local/student.txt' into table student;
  12. 3.3、在/usr/local/下 创建curriculum.txt文件 准备学生数据
  13. 01 语文 02
  14. 02 数学 01
  15. 03 英语 03
  16. 3.4、添加课程数据
  17. load data local inpath '/usr/local/curriculum.txt' into table curriculum;
  18. 3.5、在/usr/local/下 创建teacher.txt文件 准备学生数据
  19. 01 张三
  20. 02 李四
  21. 03 王五
  22. 3.6、添加教师数据
  23. load data local inpath '/usr/local/teacher.txt' into table teacher;
  24. 3.7、在/usr/local/下 创建score.txt文件 准备学生成绩数据
  25. 01 01 80
  26. 01 02 90
  27. 01 03 99
  28. 02 01 70
  29. 02 02 60
  30. 02 03 80
  31. 03 01 80
  32. 03 02 80
  33. 03 03 80
  34. 04 01 50
  35. 04 02 30
  36. 04 03 20
  37. 05 01 76
  38. 05 02 87
  39. 06 01 31
  40. 06 03 34
  41. 07 02 89
  42. 07 03 98
  43. 添加学生成绩数据
  44. load data local inpath '/usr/local/score.txt' into table score;

4.分别查看学生信息、课程信息、教师信息、学生成绩信息

  1. 查看学生表数据
  2. SELECT * FROM Student;
  3. 查看课程表数据
  4. SELECT * FROM curriculum;
  5. 查看教师表数据
  6. SELECT * FROM Teacher;
  7. 查看成绩表数据
  8. SELECT * FROM Score;

5.分别将学生表中姓名为’’郑竹”的学生性别修改为“男”,教师表中姓名为“王五”的修改为“赵六”

  1. 5.1、将student.txt中郑竹的性别改为‘男’
  2. 01 赵雷 1990-01-01 20
  3. 02 钱电 1990-12-21 20
  4. 03 孙风 1990-05-20 20
  5. 04 李云 1990-08-06 20
  6. 05 周梅 1991-12-01 19
  7. 06 吴兰 1992-03-01 18
  8. 07 郑竹 1989-07-01 21
  9. 08 王菊 1990-01-20 20
  10. 5.2、重新加载覆盖数据
  11. load data local inpath '/usr/local/student.txt' overwrite into table student;
  12. 5.3、将teacher.txt中王五的姓名改为‘赵六’
  13. 01 张三
  14. 02 李四
  15. 03 赵六
  16. 5.4、重新加载覆盖数据
  17. load data local inpath '/usr/local/teacher.txt' overwrite into table teacher;

6.分别删除学生表、教师表、课程表、成绩表中的所有数据

  1. 删除学生表数据
  2. truncate table Student;
  3. 删除程表数据
  4. truncate table curriculum;
  5. 删除教师表数据
  6. truncate table Teacher;
  7. 删除成绩表数据
  8. truncate table Score;

7.分别删除学生表、教师表、课程表、成绩表

  1. 删除学生表
  2. DROP TABLE Student;
  3. 删除除程表
  4. DROP TABLE curriculum;
  5. 删除教师表
  6. DROP TABLE Teacher;
  7. 删除成绩表
  8. DROP TABLE Score;

8.删除’校园教育数据仓库’

  1. 删除数据仓库
  2. DROP DATABASE school_edu_base;

二、表结构修改

一:修改表信息

1.修改表名

  1. # 新建一个学生会数据库
  2. create database student_union;
  3. # 新建一个usr表
  4. create table usr(id int, name string,age int,sex string,address string) row format delimited fields terminated by ',';
  5. # 新建一个student表
  6. create table student(id int, name string,age int,sex string,class string)
  7. row format delimited fields terminated by ',';
  8. # 修改用户表表名
  9. alter table usr rename to usrs;
  10. # 修改学生表表名
  11. alter table student rename to students;

2.修改表注释

  1. alter table usrs SET TBLPROPERTIES('comment' = '用户信息表');
  2. alter table students SET TBLPROPERTIES('comment' = '学生信息表');

二:修改字段信息

1.修改字段类型和注释

  1. alter table students CHANGE COLUMN class class int comment '学生所属班级'
  2. alter table usrs CHANGE COLUMN address address string comment '家庭地址'

2.修改字段类型

  1. alter table students CHANGE COLUMN class class string;
  2. alter table usrs CHANGE COLUMN address address int;

3.修改字段名称

  1. alter table students change name student_name string COMMENT '用户名称';
  2. alter table usrs change name usr_name string COMMENT '学生名称';

4.增加一个字段,设好数据类型,添加注释

  1. alter table students add columns(url string comment '学校地址') ;
  2. alter table usrs add columns(hobby string comment '兴趣爱好') ;
  3. alter table usrs add columns(work string,sal string) ;

5.删除字段

  1. # 删除aid字段
  2. alter table students replace columns(id int, name string,age int,sex string,class string,url string);
  3. # 删除aid字段
  4. alter table usrs replace columns(id int, name string,age int,sex string,address string,hobby string);
  5. # 删除url字段
  6. alter table students replace columns(id int, name string,age int,sex string,class string);
  7. # 删除hobby字段
  8. alter table usrs replace columns(id int, name string,age int,sex string,address string);

6.在表头新增字段

  1. # 在学生表头新增字段
  2. alter table students add columns(school string comment '学校名称') ;
  3. alter table students change school school string first;
  4. # 在用户表头新增字段
  5. alter table usrs add columns(school string comment '学校名称') ;
  6. alter table usrs change school school string first;

7.在某个字段后增加字段

  1. # 在最后面添加字段
  2. alter table students add columns(url string comment '学校地址');
  3. # 将字段调整位置导某个字段后
  4. alter table students change url url string after id;
  5. # 在最后面添加字段
  6. alter table usrs add columns(hobby string comment '兴趣爱好');
  7. # 将字段调整位置导某个字段后
  8. alter table usrs change hobby hobby string after id;

8.调整字段顺序

  1. # 将students表的url字段调整到age后
  2. alter table students change url url string after age;
  3. # 将students表的sex字段调整到url后
  4. alter table students change sex sex string after url;
  5. # 将usrs表的address字段调整到id后
  6. alter table usrs change address address string after id;
  7. # 将usrs表的sex字段调整到address后
  8. alter table usrs change sex sex string after address;

三、关联表创建

一:关联表的创建

1.创建数据仓库“education”

  1. create database education;
  2. use education;

2.创建课程表并插入课程数据

  1. 2.1、创建表
  2. create table `course` (
  3. `id` string COMMENT '课程id',
  4. `name` string COMMENT '课程名称',
  5. `isdelete` int COMMENT '是否删除:0-否,1-是'
  6. )row format delimited fields terminated by '\t';
  7. 2.2、在/usr/local/下创建course.txt文件,准备数据
  8. 01 Hadoop大数据基础 0
  9. 02 大数据概论 0
  10. 03 Hive数据仓库应用 0
  11. 2.3、加载数据
  12. load data local inpath '/usr/local/course.txt' overwrite into table course;

3.创建班级表并插入班级数据

  1. 3.1、创建班级表
  2. CREATE TABLE `clazz` (
  3. `code` string COMMENT '班级识别码',
  4. `name` string COMMENT '班级名称',
  5. `createtime` string COMMENT '创建时间',
  6. `updatetime` string COMMENT '修改时间',
  7. `createuser` string COMMENT '创建人',
  8. `updateuser` string COMMENT '修改人'
  9. ) COMMENT = '班级表'
  10. row format delimited fields terminated by '\t';
  11. 3.2、在/usr/local/下创建clazz.txt文件,准备数据
  12. 2020131 建筑一班 2020-08-22 14:44:52 2020-08-22 14:44:52 张三 张三
  13. 2020132 建筑二班 2020-08-22 14:44:52 2020-08-22 14:44:52 李四 李四
  14. 2020133 建筑三班 2020-08-22 14:44:52 2020-08-22 14:44:52 王五 王五
  15. 3.3、加载数据
  16. load data local inpath '/usr/local/clazz.txt' overwrite into table clazz;

4.创建课程班级关联表

  1. 4.1、创建关联表
  2. CREATE TABLE `courseclazz` (
  3. `code` string COMMENT '班级编码',
  4. `c_id` string COMMENT '课程id',
  5. `teacher` string COMMENT '授课教师',
  6. `createtime` string COMMENT '创建时间',
  7. `createuser` string COMMENT '创建人'
  8. ) COMMENT '课程班级关联表'
  9. row format delimited fields terminated by '\t';
  10. 4.2、在/usr/local/下创建courseclazz.txt文件,准备数据
  11. 2020131 01 张三 2020-08-22 14:44:52 张三
  12. 2020131 02 李四 2020-08-22 14:44:52 李四
  13. 2020131 03 赵六 2020-08-22 14:44:52 赵六
  14. 2020132 01 张三 2020-08-22 14:44:52 张三
  15. 2020132 02 李四 2020-08-22 14:44:52 李四
  16. 2020132 03 赵六 2020-08-22 14:44:52 赵六
  17. 2020133 01 张三 2020-08-22 14:44:52 张三
  18. 2020133 02 李四 2020-08-22 14:44:52 李四
  19. 2020133 03 赵六 2020-08-22 14:44:52 赵六
  20. 4.3、加载数据
  21. load data local inpath '/usr/local/courseclazz.txt' overwrite into table courseclazz;

5.创建学生表并插入数据

  1. 5.1、创建表
  2. CREATE TABLE `Student`(
  3. `s_id` VARCHAR(20) COMMENT '学生id',
  4. `s_name` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '学生姓名',
  5. `s_birth` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '学生输入',
  6. `s_sex` VARCHAR(10) NOT NULL DEFAULT '' COMMENT '学生性别',
  7. `s_age` int NOT NULL COMMENT '学生年龄',
  8. PRIMARY KEY(`s_id`)
  9. );
  10. 5.2、在/usr/local/下 创建student.txt文件 准备学生数据
  11. 01 赵雷 1990-01-01 20
  12. 02 钱电 1990-12-21 20
  13. 03 孙风 1990-05-20 20
  14. 04 李云 1990-08-06 20
  15. 05 周梅 1991-12-01 19
  16. 06 吴兰 1992-03-01 18
  17. 07 郑竹 1989-07-01 21
  18. 08 王菊 1990-01-20 20
  19. 5.3、添加学生数据
  20. load data local inpath '/usr/local/student.txt' into table student;

6.创建学生班级表

  1. 6.1、创建表
  2. CREATE TABLE `studentclazz`(
  3. `s_id` VARCHAR(20) COMMENT '学生id',
  4. `code` varchar(50) COMMENT '班级编码',
  5. `createtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  6. `createuser` varchar(50) NOT NULL COMMENT '创建人'
  7. )COMMENT='学生表班级表';
  8. 6.2、在/usr/local/下 创建studentclazz.txt文件 准备学生数据
  9. 01 2020131 2020-08-22 14:44:52 张三
  10. 02 2020131 2020-08-22 14:44:52 张三
  11. 03 2020131 2020-08-22 14:44:52 张三
  12. 04 2020132 2020-08-22 14:44:52 李四
  13. 05 2020132 2020-08-22 14:44:52 李四
  14. 06 2020132 2020-08-22 14:44:52 李四
  15. 07 2020133 2020-08-22 14:44:52 王五
  16. 08 2020133 2020-08-22 14:44:52 王五
  17. 6.3、添加学生数据
  18. load data local inpath '/usr/local/studentclazz.txt' into table studentclazz;

7.创建学生用户表并插入用户数据

  1. 创建表
  2. CREATE TABLE `users` (
  3. `ID` int(20) NOT NULL AUTO_INCREMENT,
  4. `USERNO` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户账号',
  5. `USERNAME` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户名称',
  6. `PASSWORD` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '登录密码',
  7. `EMAIL` varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '邮箱',
  8. `s_id` varchar(6) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '学生id',
  9. `STATUS` varchar(6) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '状态',
  10. `CREATERNO` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '数据创建者',
  11. `CREATEDATE` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '数据创建时间',
  12. `MODIFIERNO` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '数据修改者',
  13. `MODIFIEDATE` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '数据修改时间',
  14. PRIMARY KEY (`ID`) USING BTREE
  15. )COMMENT = '学生用户列表';
  16. 插入数据
  17. INSERT INTO `users` VALUES (1, 'zhaolei', '赵雷', '123456', 'zhaolei@sina.com', '01', 'W00101', '张三', '2013-08-14 09:33:55', '张三', '2020-02-21 19:11:42');
  18. INSERT INTO `users` VALUES (2, 'qiandian', '钱电', '123456', 'qiandian@sina.com', '02', 'W00101', '张三', '2020-06-18 21:39:48', '张三', '2020-06-18 21:39:48');
  19. INSERT INTO `users` VALUES (3, 'shunfeng', '孙风', '123456', 'shunfeng@sina.com', '03', 'W00101', '张三', '2020-06-18 21:40:16', '张三', '2020-06-18 21:40:16');
  20. INSERT INTO `users` VALUES (4, 'liyun', '李云', '123456', 'liyun@sina.com', '04', 'W00101', '李四', '2020-07-30 08:43:59', '李四', '2020-07-30 08:43:59');
  21. INSERT INTO `users` VALUES (5, 'zoumei', '周梅', '123456', 'zoumei@sina.com', '05', 'W00101', '李四', '2020-08-18 11:07:05', '李四', '2020-08-18 11:07:05');
  22. INSERT INTO `users` VALUES (6, 'wulan', '吴兰', '123456', 'wulan@sina.com', '06', 'W00101', '李四', '2020-08-20 10:22:59', '李四', '2020-08-20 10:22:59');
  23. INSERT INTO `users` VALUES (7, 'zhengzu', '郑竹', '123456', 'zhengzu@sina.com', '07', 'W00101', '赵六', '2020-08-22 11:35:43', '赵六', '2020-08-22 11:35:43');
  24. INSERT INTO `users` VALUES (8, 'wangju', '王菊', '123456', 'wangju@sina.com', '08', 'W00101', '赵六', '2020-08-20 10:22:59', '赵六', '2020-08-20 10:22:59');

四、基本查询操作

一:创建学生信息数据仓库database_student及数据表student,并插入相应数据

  1. 创建一个database_student数据库

    1. create database database_student;
  2. 进入database_student数data据库

    1. use database_student;
  3. 在database_student库中创建一个名为student的学生成绩表

    1. create table student(name string,cj int)row format delimited fields terminated by '\t';
  4. 向student表中插入数据
    列如以下学生成绩:

    1. 张国强 78
    2. 李峰 96
    3. 刘正 85
    4. 李奕辰 88
    5. 刘明 82
    6. 黄东 52
    7. 张董 28
    8. 黄晓 76
    9. 流觞 52
    10. 可乐 85
    11. 黄庭 56
    12. 黄山 25
    13. 张明 83
    14. 晓国 86
    15. 李栋 98
    16. 李强 92
    17. 王国峰 100
    18. 刘和刚 9
    19. 张七郎 85
    20. 黄东强 58
    21. 张国栋 98
    22. 辛温 95
  5. 使用数据加载语句把数据加载到表中

    1. load data local inpath '/usr/local/hive/student.txt' into table student;
  6. 查询student表中所有的数据

    1. select name,cj from student;

二:使用HSQL查询相应数据信息

  1. 查询成绩及格的数据

    1. select name,cj from student where cj>=60;
  2. 查询成绩不及格的数据

    1. select name,cj from student where cj<60;
  3. 查询成绩是满分的同学

    1. select * from student where cj=100;
  4. 查询表前10条数据

    1. select * from student limit 10;

    5.查询所有姓’黄’同学的分数

  1. select * from student where name like "%黄%";

三:使用HSQL聚合函数查询相应数据信息

  1. 统计表中有多少条数据

    1. select count(*) from student;
  2. 统计及格的人数有多少

    1. select count(*) from student where cj>=60;
  3. 统计表中的平均分是多少

    1. select avg(cj) from student;
  4. 表中成绩最高分是多少

    1. select max(cj) from student;
  5. 表中成绩最低分是多少

    1. select min(cj) from student;

五、运算符

一:Hive算术运算符的使用

1.新建一个student学生信息表

  1. create table student (s_id int,s_name string,s_age int,s_sex string,major string)row format delimited fields terminated by '\t';

2.导入student.txt数据

  1. # student
  2. 1910 张三 20
  3. 1911 李四 21
  4. 1912 王麻子 22
  5. 1913 徐勇 23
  6. 1914 张馨月 24
  7. 1915 刘琳 25
  8. 1916 刘洋 18
  9. 1917 杨洋 20
  10. 1918 周琦 22
  11. 1919 张杰 19
  12. 1920 范冰冰 20
  13. 1921 mike 18
  14. load data local inpath '/usr/local/student.txt' into table student;

3.根据’学生信息表’年龄字段对关系运算符做展示

  1. 对年龄字段做加法处理
  2. SELECT s_age+2 FROM student;
  3. 对年龄字段做减法处理
  4. SELECT s_age-1 FROM student;
  5. 对年龄字段做乘法处理
  6. SELECT s_age*1 FROM student;
  7. 对年龄字段做除法处理
  8. SELECT s_age/2 FROM student;
  9. SELECT s_age DIV 2 FROM student;
  10. 对年龄字段做取余处理
  11. SELECT s_age%2 FROM student;

二:Hive比较运算符的使用

1.根据’学生信息表’年龄字段对比较运算符做展示

  1. 查询年龄大于20岁的所有学生数据
  2. SELECT * FROM student where s_age > 20;
  3. 查询年龄小于20岁的所有学生数据
  4. SELECT * FROM student where s_age < 20;
  5. 查询年龄不等于20岁的所有学生数据
  6. SELECT * FROM student where s_age <> 20;
  7. SELECT * FROM student where s_age != 20;
  8. 查询年龄等于20岁的所有学生数据
  9. SELECT * FROM student where s_age = 20;
  10. 查询年龄小于等于20岁的所有学生数据
  11. SELECT * FROM student where s_age <= 20;
  12. 查询年龄大于等于20岁的所有学生数据
  13. SELECT * FROM student where s_age >= 20;
  14. 查询年龄在18-20之间的所有学生数据
  15. SELECT * FROM student where s_age between 18 and 20;
  16. 查询年龄在18,20,22,24中的所有学生数据
  17. SELECT * FROM student where s_age in (18,20,22,24);
  18. 查询年龄不在19,21,23,25,27中的所有学生数据
  19. SELECT * FROM student where s_age not in (19,21,23,25,27);
  20. 查询年龄为空的所有学生数据
  21. SELECT * FROM student where s_age is NULL;
  22. 查询年龄不为空的所有学生数据
  23. SELECT * FROM student where s_age is NOT NULL;
  24. 查询名字以张开头的所有学生数据
  25. SELECT * FROM student where s_name like '张%';
  26. 查询名字有中刘字的所有学生数据
  27. SELECT * FROM student where s_name REGEXP '刘';

三:Hive逻辑运算符的使用

1.根据’学生信息表’年龄、性别、学号字段对逻辑运算符做展示

  1. 查询年龄大于等于18岁且性别为男的所有学生数据
  2. SELECT * FROM student
  3. where s_age >= 18
  4. and s_sex = '男';
  5. 查询学号为01或学号为02的所有学生数据
  6. SELECT * FROM student
  7. where s_id = '1911'
  8. or s_id = '1919';
  9. 查询性别不为男的所有学生数据
  10. SELECT * FROM student
  11. where s_sex != '男';
  12. 查询性别不为女的所有学生数据
  13. SELECT * FROM student
  14. where s_sex != '女';

六、正则表达式模糊查询

一:Hive正则表达式使用

1.新建一个“学生信息表”

  1. create table student (s_id int,s_name string,s_age int,s_sex string,major string)row format delimited fields terminated by '\t';

2.导入student.txt数据

  1. # student数据
  2. 1910 张三 20 hadoop
  3. 1911 李四 21 linux
  4. 1912 王麻子 22 mysql
  5. 1913 徐勇 23 java
  6. 1914 张馨月 24 python
  7. 1915 刘琳 25 hive
  8. 1916 刘洋 18 hbase
  9. 1917 杨洋 20 c语言
  10. 1918 周琦 22 UI
  11. 1919 张杰 19 vue
  12. 1920 范冰冰 20 element
  13. 1921 mike 18 hadoop
  14. load data local inpath '/usr/local/student.txt' into table student;

3.查询’学生信息表’中’姓名’字段以’王’开头的学生数据

  1. SELECT * FROM student WHERE s_name REGEXP '^王';

4.查询名称中含有hadoop专业名称的 学生信息

  1. SELECT * FROM student WHERE major REGEXP '^Hadoop';

5.查询’学生信息表’中’姓名’字段以’洋’结尾的数据

  1. SELECT * FROM student WHERE s_name REGEXP '洋$';

6.查询专业以nux结尾的专业数据

  1. SELECT * FROM student WHERE major REGEXP 'nux$';

7.查询所有以1开头2结尾学号的学生数据

  1. SELECT * FROM student WHERE s_id REGEXP '^1912$';

8.查询’学生信息表’中’姓名’字段包含’洋’的数据

  1. SELECT * FROM student WHERE s_name regexp '洋*';
  2. 注:在指定字符之前必须有内容

9.匹配’学生信息表’中’姓名’字段包含’冰冰’的学生数据

  1. SELECT * FROM student WHERE s_name regexp '冰冰';

10.查询名字中含有两个冰字的学生数据

  1. SELECT * FROM student WHERE s_name regexp '(冰){2}';

11.查询学生’张三’、’李四’、’王麻子’的学生数据

  1. SELECT * FROM student WHERE s_name regexp '^张三$|^李四$|^王麻子$';

12.查询以周开头或者以洋结尾的学生数据

  1. SELECT * FROM student WHERE s_name regexp '^周|洋$';

13.查询除开’刘洋’之外学生数据

  1. SELECT * FROM student WHERE s_name regexp '[^(刘洋)]';

14.查询学生中姓名不为中文的学生

  1. SELECT * FROM student WHERE s_name REGEXP '[u0391-uFFE5]+';

15.查询学生中姓名为中文的学生

  1. SELECT * FROM student WHERE s_name REGEXP '[^u0391-uFFE5]+'

16.查询年龄为整数的学生数据

  1. SELECT * FROM student WHERE s_age regexp '[0]';

17.查询年龄不等于20的学生数据

  1. SELECT * FROM student WHERE s_age regexp '[^(20)]';

18.查询年龄20出现1次以上的学生数据

  1. SELECT * FROM student WHERE s_age regexp '20{1,}';
  2. SELECT * FROM student WHERE s_age regexp '20+';

19.查询年龄在18或28的学生数据

  1. SELECT * FROM student WHERE s_age regexp '[1-2]8';

七、子查询

一:子查询操作

  1. 进入database_student数据库

    1. use database_student;
  2. 创建一个学生信息成绩表

    1. create table studentcj(name string,age int,Gender String,class String,cj int)row format delimited fields terminated by '\t';
  3. 向studentcj表中录入一下数据
    列如:

    1. 张飞 19 5 95
    2. 刘备 21 2 86
    3. 关羽 20 4 60
    4. 小乔 18 1 80
    5. 刘美乐 19 5 87
    6. 刘郑国 21 4 79
    7. 张国栋 20 3 90
    8. 刘攀 18 2 97
    9. 向会英 18 3 45
    10. 王捷 18 4 36
    11. 徐海英 18 5 58
    12. 邵浙渝 19 1 68
    13. 刘伟 20 2 60
    14. 王颖佳 21 1 76
    15. 扶齐 19 5 62
    16. 周福亮 21 4 51
    17. 冯兰 22 3 66
    18. 张丹媚 20 2 58
    19. 焦艳荣 19 5 68
    20. 叶昌建 22 4 98
    21. 胥迅 18 5 76
    22. 周建武 19 2 88
    23. 晏旖嫔 20 3 97
    24. 高洁 19 5 100
    25. 王爱卿 18 1 99
    26. 于晓琴 19 3 54
  4. 使用数据加载语句把数据加载到表中

    1. load data local inpath '/usr/local/hive/studentcj.txt' into table studentcj;
  5. 查询成绩在80分以上的学生基本信息

    1. select * from (select * from studentcj where cj>=80)a;
  6. 查询女学生中年龄大于18的女学生信息

    1. SELECT * FROM (SELECT * FROM studentcj WHERE Gender = '女' ) as temp WHERE age>18;
  7. 查询成绩不及格的学生都在那些班级

    1. select class from(select * from studentcj where cj<60)a;
  8. 查询年龄大于等于20的学生信息

    1. select * from(select * from studentcj where age>=20)a;
  9. 9.查询5班的平均分是多少

  1. select avg(cj) from(select * from studentcj where class="5班")a;

10.查询所有成绩及格学生的信息

  1. select * from(select * from studentcj where cj>=60)a;
  1. 11.统计表中所有的男生人数
  1. select count(*) from(Select * from studentcj where gender='男')a;
  1. 12.查寻年龄在19岁中成绩最高的学生信息
  1. select max(cj) from(select * from studentcj where age=19)a;

八、联合查询

一:内联查询操作

  1. 进入database_student数据库

    1. use database_student;
  2. 创建专业表

    1. create table zy(zybm int,zymc string)row format delimited fields terminated by '\t';
  3. 导入以下数据
    列如:

    1. 1 建筑系
    2. 2 信息系
    3. 3 人工智能系
    4. 4 美术系
    5. 5 计算机系
    6. 6 表演系
  4. 使用数据加载语句把数据加载到表中

    1. load data local inpath '/usr/local/hive/zy.txt' into table zy;
  5. 创建班级表

    1. create table bj(bjmc string,fdy string,bjbm int,zybm int)row format delimited fields terminated by '\t';
  6. 导入以下数据
    列如:

    1. 建筑工程一班 刘正 1 1
    2. 信息工程三班 河东 2 2
    3. 计算机二班 李全 3 5
    4. 人工智能一班 刘美 4 3
    5. 美术四班 张正 5 4
    6. 表演一班 李明 6 6
  7. 使用数据加载语句把数据加载到表中

    1. load data local inpath '/usr/local/hive/bj.txt' into table bj;
  8. 创建学生表

    1. create table xs(xsxm string,nl int,xb string,bjbm int)row format delimited fields terminated by '\t';
  9. 导入以下数据

    1. 张飞 19 5
    2. 刘备 21 2
    3. 关羽 20 4
    4. 小乔 18 1
    5. 刘美乐 19 6
    6. 刘郑国 21 4
    7. 张国栋 20 3
    8. 刘攀 18 2
    9. 向会英 18 3
    10. 王捷 18 6
    11. 徐海英 18 5
    12. 邵浙渝 19 1
    13. 刘伟 20 2
    14. 王颖佳 21 1
    15. 扶齐 19 5
    16. 周福亮 21 4
    17. 冯兰 22 3
    18. 张丹媚 20 6
    19. 焦艳荣 19 5
    20. 叶昌建 22 4
    21. 胥迅 18 5
    22. 周建武 19 2
    23. 晏旖嫔 20 6
    24. 高洁 19 5
    25. 王爱卿 18 1
    26. 于晓琴 19 3
  10. 使用数据加载语句把数据加载到表中

    1. load data local inpath '/usr/local/hive/xs.txt' into table xs;
  11. 以内连的方式查询计算二班的学生信息

    1. select * from xs as x inner join bj as b on x.bjbm=b.bjbm where b.bjbm=3;
  12. 查询专业人工智能系下的学生信息

    1. select * from xs as x inner join bj as b on x.bjbm=b.bjbm inner join zy as z on b.zybm=z.zybm where z.zybm=3;

二:外联查询操作

  1. 使用HSQL的左连接查询张飞是那个班的学生

    1. select x.*,b.bjmc from xs as x left join bj b on x.bjbm=b.bjbm where x.xsxm='张飞';
  2. 使用左连接查询学生 扶齐 的班级名称,辅导员,专业

    1. select x.*,b.bjmc,b.fdy,z.zymc from xs as x left join bj b on x.bjbm=b.bjbm left join zy as z on b.zybm=z.zybm where x.xsxm='扶齐';
  3. 使用右连接查询人工智能一班学生信息

    1. select b.bjmc,x.* from bj as b right join xs x on b.bjbm=x.bjbm where b.bjmc='人工智能一班';

三:union操作

  1. 分别查询男女生学生信息并以union将结果联合在一起
    1. select * from xs where xb='男' union select * from xs where xb='女';