功能
将HDFS中的文本以表格的形式管理,Hive里存储的不是数据本身,而是数据的元数据信息
Linux中MySQL安装
查看已经安装的MySQLrpm -qa|grep mysql
通过获得的数据卸载系统自带的MySQLrpm -e --nodeps 数据值
安装MySQL,需要安装Server端,Client端rpm -ivh 软件名
Server安装好后会给一个文件地址,里面放的是密码
启动MySQL服务端
service mysql start
安装Client端
登录
mysql -u账号名 -p刚拿到到的密码
第一次登录需要设置新密码
之后还需要配置HIVE的元数据库,更改MYSQL中的某个数据库内容用以从Navite连接数据库
常用命令
启动hive
bin/hive
选择数据库
use 数据库名
删表
droop table 表名
创表
create table 表名 (数据名 类型,数据名 类型) row format delimited fields terminated by '\t'
加载本地数据入表
load data local inpath '路径'
加载hdfs数据入表
load data inpath '路径'
不进入Hive执行SQL语句
bin/hive -e “SQL语句”
也可以把SQL语句放在.sql文件里执行 内容以;结尾
bin/hive -f /路径
将结果输出到文件
bin/hive -f /sql语句路径 > /存放结果路径
退出Hive
quit;
为什么元数据不存在derby
原因:derby只能被一个进程使用,无法满足集群需求
解决办法:存储在MySQL中
DDL数据定义语言,影响的是结构上 create drop alter
DML数据操作语言,影响数据 update
DQL 数据查询语言 select
DDL简单介绍
删除数据库
drop database if exist 数据库
当数据库有数据
drop database 数据库 cascade
表的创建
创建内部表
create table 表名(id int,name string) row format delimited fields terminal by '\t' stored as textfile location '希望添加的数据存储路径'
加external 为外部表 删除的时候只删除元数据,表里数据还在
create external table 表名(id int,name string) row format delimited fields terminal by '\t' stored as textfile location '希望添加的存储路径'
内部表加载hdfs数据,数据会从原地点转移到表路径,外部表只会映射一下但不移动
load data inpath '数据路径'
创建内部表还是外部表:需要给其他人用,创建外部表,自己用内部表
分区表(方便查询)
创建分区表
create table student(id int,name int) partitioned by (month string)
row format delimited fields terminated by '\t'
向表内指定分区加数据,这时候想查某个月数据就不会找所有的列表,更加精确的查找数据,减少查询时间
load data inpath '数据路径' into table student partition(month='202007')
增加分区
alter table student add partition (month='202008'),partition (month='202009')...
虽然分区的本质是创建目录,但直接创建不能算是增加分区,因为HIVE中的元数据并没有改变
想要直接通过创建目录增加分区可以通过进行修复msck repair table 表名
加载数据
dfs -put 文件路径 表路径
数据的导出
insert overwrite local directory '路径' row format delemited fields terminaled by '\t'
SQL语句
通过hdfs下载下来
hdfs fs -get 表路径 下载目的地
DQL简单介绍
列别名
select ename as name,eage as age from student
常用函数count(),max(),min(),sun(),avg()
limit 结果前x行
select ename as name,eage as age from student limit 5
where
select * from student where age in (0,18)
模糊查询like
select * from student where name like '王%' 姓王的
select * from student where name like '_王%' 第二个为王
select * from student where name like '%王%' 包含王的
分组 group by
通常和聚合函数一起用
select count(*) from student group by sex
根据两个字段分区时候
查找每个部门每个岗位的最高薪水
select deptno,job,max(salary) group by dept,job
执行顺序 先分组 后聚合函数
Having语句
1.having 与 where 不同点
1)where针对表中的列发挥作用,还没做其他操作,先过滤数据。
having针对结果中的列
2)where后面不能写分组函数,having后面可以
3)having只用于group by 分组语句
例题:求每个部门平均薪水大于2000
1,求每个部门的平均薪资
select dept ,avg(salary) from emp group by dept
2,结果中大于两千的数据
select dept ,avg(salary) from emp group by dept having avg(salary)>2000
JOIN连接
分类内外连接,
外连接:即使找不到满足条件的记录,另一方的记录还是要输出
内连接:只有两个表都存在满足条件才输出
ouder by 按照单个/多个列排序(一个mapreduce)
按照年龄升序,分数倒叙
select * from student order by age asc scope desc
sort by 每个mapreduce 内部进行排序,对全局不是排序
1.设置reduce个数
set mapreduce.job.reduces=3;
2.查看设置redece数
set mapreduce.job.redues;
3.根据部门编号降序查看员工信息
select * from emp sort by empno desc ;
产生三个mapreduce ,三个结果文件,内部有序总体无序
Distribute By 分区排序,结合sort by 使用
根据性别分区,按照年纪排序
select * from student distribute by sex sort by age
Cluster By
当distribute by,sort by属性一致时使用,但不能指定排序规则,只能倒叙(有时候自定义的分区器,一个范围的会分一起)
分桶和分区的区别
分区针对的时数据存储路径,分区针对的是数据文件 分区:把文件放进不同的目录,查的时候找到文件夹就容易查询
分桶:根据某一条数据满足的条件进行分桶样例字段:id,data,month 根据月份将数据放进不同的文件夹里面,这是分区,如果数据又一百万条数据,查询就很费时,在同一个文件夹里面根据用户id%10之类的条件将数据放进不同的文件里,这是分桶,在获取数据的时候极大增加速度
分桶举例
根据id分成4个桶
create table student(id int,name string) clustered by(id) into 4 buckets
row format delimited fields terminated by '\t'
load data inpath ‘路径’ into table student 向分桶表添加数据结果文件还是一个
先将表数据清除,再将数据放进student1表,这样将数据逐条插入
insert table student select id ,name from student1
结果也是一个文件
需要设置属性
查看表详细信息
desc formatted student
清空表数据
truncate table student
case when
id kind
1 黄金
1 白银
1 白银
1 白银
2 黄金
2 白银
2 黄金
2 黄金
分别计算各个仓库黄金白银各多少
select id sum(case 黄金 1 erse 0 end) as 黄金,sum(case 白银 1 erse 0 end) as 白银 from table group by id
concat字符串连接
每个列名前加hello
select concat(" name",dep) from employee
concat_ws字符串连接,中间有分隔符
格式:concat_ws(" 分隔符"," hello",dep)
collectset(字段)
去重操作,返回数组,里面数据只能处理基本数据类型
collectset可以和concat_ws一起使用
select concaat_ws(" |",collectset(字段)) from table
函数
查看系统自带函数
show functions
查看函数描述
desc function sum
查看函数例子
desc function extended sum