hive

Posted foremostxl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hive相关的知识,希望对你有一定的参考价值。

 hive基础

大数据特性与应用
分布式架构概念
Hadoop2.x系统介绍


掌握hive基础建表,以及表格式
了解hive查询
了解正则表达式

1、hive的简介‘’

技术图片

 

技术图片

hive是基于hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类sql的查询功能
hive的本质: hive本身并不存储任何数据,用hdfs存储数据,用MapReduce计算数据 披着sql外衣的MapReduce
---- sql ---- mapreduce

 

 

Hive在Hadoop生态体系中

技术图片

 

 

hive ------- 类sql语句 ----- 依赖于hadoop
hive安装路径
cd /opt/modules/hive-1.2.1

启动
bin/hive

官网:hive.apache.org 

 技术图片

use hadoop29;

desc hadoop29;

 

先创建数据

vi st.txt,以空格形式展现

技术图片

 

 

查看表信息

查看表信息:
desc student;
desc formatted student;
加载本地数据:
load data local inpath /home/hadoop/st.txt  into table student;
select * from student;
student.id    student.name
NULL    NULL 解析不到数据
NULL    NULL
因为没有按指定的分割符号进行导入数据

重新建立新表格student1

create table student1(
id int,
name string
)row format delimited fields terminated by ;

 

load data local inpath /home/hadoop/st.txt  into table student1;
select * from student1;
技术图片

 

加载hdfs上数据:
load data inpath hdfs路径  into table student;
load data inpath /test29/st.txt  into table student1;

bin/hdfs dfs -put /home/hadoop/st.txt /test29
相当于把hdfs上对应数据移动到hdfs对应的表目录中

mysql 写时模式  int  ---  string 
在写入数据时就对数据进行检查

hive 读时模式
在读取数据时才检查数据

drop table student;

exit;

 

/user/hive/warehouse ----- hive的数据仓库目录

技术图片

 hive作业1

1:hive的本质是什么?

Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能。
本质是:将HQL转化成MapReduce程序

3:hive查询数据时全部显示为null,是什么原因导致的?

导入数据时的解析不到数据,显示为null

建表 时需要指定列分隔符与导入表格数据之前的分隔符分隔符保持一致

create table student1(

id int,

name string

)row format delimited fields terminated by 	;

hive建表方式

common : 基础模块为其他模块提供服务
hdfs: 存储数据管理数据
    namenode  主 1   管理元数据信息
    datanode  从 多个 存储具体的数据
yarn: 作业调度和资源管理
    resourcemanager:管理整个集群的计算资源  主
    nodemanager:管理自己所在节点的资源   从
mapreduce : 编程模型 分布式并行计算模型 

先启动hadoop再启动hive

启动所有的节点:
sbin/start-all.sh
关闭
sbin/stop-all.sh

hive 依赖于Hadoop,用hdfs存储数据,用MapReduce计算数据
工具----- 披着sql外衣的MapReduce---- sql----mapreduce计算数据

hive 安装目录:/opt/modules/hive-1.2.1/

启动:
bin/hive

普通创建表方法:

 

员工编号,员工姓名,职位,上司,入职日期,薪资,奖金,部门编号
create table emp(
empno int,
ename string,
job string,
mgr int,
hiredate string,
sal double,
comm double,
deptno int
)
row format delimited  fields terminated by 	;

 

上传本地文件到linux,使用xhell工具

技术图片技术图片

 

 

Windows ------ linux ----- hive(表)----hdfs 

load data local inpath /home/hadoop/emp.txt into table emp;

另外一种方法:加载hdfs上的数据:
load data  inpath hdfs路径 into table emp;

技术图片

 

 

 子查询建表方法:

 

子查询:可以克隆一个表的结构以及表的数据  

create table emp_1 as select * from emp;

技术图片

克隆三列
create table emp_2 as select ename,sal,deptno from emp;

技术图片


as select 建表方式非常的灵活,做数据清洗的时候,经常会用到

 

like建表

 

like: 克隆了表的结构,但是不复制表的数据
create table emp_like like emp;

 

 

创建表时 指定位置

 

create table emp_man(
empno int,
ename string,
job string,
mgr int,
hiredate string,
sal double,
comm double,
deptno int
)
row format delimited  fields terminated by 	
location /user/hive/warehouse/hadoop29.db/emp;

 

show tables

技术图片

 drop table emp_man;

在删除内部表时,会删除表的元数据信息同时删除表所对应的hdfs上的表目录
不利于分享数据

技术图片

建立外部表

关键字:external
create external table emp_ext( empno int, ename string, job string, mgr int, hiredate string, sal double, comm double, deptno int ) row format delimited fields terminated by
location /user/hive/warehouse/hadoop29.db/emp;

 

desc formatted emp_ext;

Location:               hdfs://ibeifeng.com:8020/user/hive/warehouse/hadoop29.db/emp  
Table Type: EXTERNAL_TABLE 外部表

 

drop table emp_ext;
在删除外部表时,只删除表的元数据信息,不会删除hdfs上对应的表目录
利于分享数据,很多情况下都是去关联一个已存在的数据

 

create external table emp_ext(
empno int,
ename string,
job string,
mgr int,
hiredate string,
sal double,
comm double,
deptno int
)
row format delimited  fields terminated by 	;

load data local inpath /home/hadoop/emp.txt into table emp_ext;

drop table emp_ext;

临时表

临时表:temporary

 

create temporary table emp_tep(
empno int,
ename string,
job string,
mgr int,
hiredate string,
sal double,
comm double,
deptno int
)
row format delimited  fields terminated by 	;

load data local inpath /home/hadoop/emp.txt into table emp_tep;

desc formatted emp_tep;
技术图片

 

 Table Type: MANAGED_TABLE  内部表

 

临时表也是内部表的一种

关闭hive:自动删除临时表的元数据及数据文件
drop table emp_tep; 删除临时表的元数据及数据文件

 

 

 

 

分区表:关键字partitioned by----也是内部表

hive 表 --- 映射的是hdfs上的一个目录---- 子目录 ---- 子目录
分区表
----- 分目录

技术图片

 

 

 

create table emp_part(
empno int,
ename string,
job string,
mgr int,
hiredate string,
sal double,
comm double,
deptno int
)partitioned by(day string)
row format delimited  fields terminated by 	;

分区:

分区字段:创建表时指定分区字段,不能和普通字段同名,加载数据时指定加载到具体的分区,

分区字段会在hdfs形成目录,在查询时分区字段可以作为普通字段使用

load data local inpath /home/hadoop/emp.txt into table emp_part partition(day=20191201); load data local inpath /home/hadoop/emp.txt into table emp_part partition(day=20191202); load data local inpath /home/hadoop/emp.txt into table emp_part partition(day=20191203); 技术图片

select * from emp_part;

select * from emp_part where day=20191201;

二级分区:

load data local inpath /home/hadoop/emp.txt into table emp_part22 partition(day=20191201,hour=12);
load data local inpath /home/hadoop/emp.txt into table emp_part22 partition(day=20191201,hour=13);
load data local inpath /home/hadoop/emp.txt into table emp_part22 partition(day=20191202,hour=12);

select * from emp_part22 where day=20191201 and hour=12;
技术图片

 

查看分区的信息:
show partitions emp_part22;

增加分区:
alter table emp_part22 add partition(day=20190101,hour=14);
load data local inpath /home/hadoop/emp.txt into table emp_part22 partition(day=20190101,hour=14);

删除分区:
alter table emp_part22 drop partition(day=20190101,hour=14);

外部分区表:

 

create external table emp_part(
empno int,
ename string,
job string,
mgr int,
hiredate string,
sal double,
comm double,
deptno int
)partitioned by(day string)
row format delimited  fields terminated by 	;

 

 

 

 

 

window和linux文件互传

点击xshell,新建文件传输,可以实现

技术图片

 

 

 技术图片

 

 

 

 

 

 

 

 

 

11

以上是关于hive的主要内容,如果未能解决你的问题,请参考以下文章

微信小程序代码片段

VSCode自定义代码片段——CSS选择器

谷歌浏览器调试jsp 引入代码片段,如何调试代码片段中的js

片段和活动之间的核心区别是啥?哪些代码可以写成片段?

VSCode自定义代码片段——.vue文件的模板

VSCode自定义代码片段6——CSS选择器