今天整理了一下hive的相关知识,其中包括hive原理及其表相关的一些内容,主要为个人理解:
1.hive是什么有什么用?
- hive是数仓工具,可以抽取,转换,加载数据(ETL),
Hive不适用于毫秒级的响应,因为其底层是调用MR程序在Yarn上运行操作hdfs上的结构化静态数据来实现处理数据的功能,但Hive将sql跟MR结合,可以实现多维度的查询,用户的学习成本较低,上手较为容易.
2.hive工作原理
- Hive工作原理本质是将客户端发起的sql语句转换成底层的MR程序执行
- (1)hive接收到客户端发起的请求(sql语句)
- (2)根据请求获取到mysql中表的元数据信息
- (3) 将mysql语句解析,编译,优化,转换成MR语句
- (4)转换成的MR程序在YARN上执行,操作hdfs完成客户端需求
3.hive查看数据库的属性
- (1)先开启hdfs,yarn以及mysql服务
- (2) 开启hiveserver2 &服务
- (3)进入到beeline,开启远程连接客户端,连接hive服务!connect jdbc:hive2://linux01:10000
(4)show databases;
(5)desc database database_name;
4.怎么建表
- (1) 先开启hdfs,yarn以及mysql服务 (2)开启hiveserver2 &服务
(3)进入到beeline,开启远程连接客户端,连接hive服务!connect jdbc:hive2://linux01:10000
(4)create table table_name( 字段 类型. 字段 类型, … ) row format delimited
fields terminated by “分隔符”
5.怎么导入数据?
导入数据有四种方式:
(1)将数据文件直接传输到表的目录下 **(2)将本地的数据上传到表的目录下,在远程连接的界面执行load data local inpath “” into table tablename;**这种方式用的最多 (3)将hdfs中的数据移动到表的目录下, 在远程连接的界面执行load data inpath “” into table tablename; (4)创建表时,将表提取数据的目录(location “path”)设置成数据所在的目录
6.什么是内部表,外部表, 以及他们的应用场景
- 外部表是在创建表时,在create和table之间加上external关键字,声明此表为外部表
外部表的特点是删除表时,表中的数据不会一起删除,即不会影响其他共享此数据表的相关操作,一般此表适用于原始数据或公用数据的场景
默认创建不加external关键字的表为内部表 内部表又称管理表,特点是在删除表时,表中的数据会跟着一起删除
此表适用于业务数据的场景,即用完之后可以删除的情况
7.什么是分区表,分区表有什么作用? - 分区就是将数据根据查询的维度分文件夹存储管理 分区表就是实现了分区功能的表
分区表在查询数据的时候更高效,普通表查询数据需要检索表目录下所有的文件,再筛选出符合条件的数据,而分区表可以直接指定分区查询,效率更高.
8.创建分区表 ,二级分区表 ,导入数据
1)创建分区表
create table tb_name(
字段 类型,
字段 类型,
...
)
partitioned by(字段 类型)
row format delimited fields terminated by “”;
load data local inpath “” into table tb_name partition(字段=”’’);
2)创建二级分区表
create table tb_name(
字段 类型,
字段 类型,
...
)
partitioned by(字段 类型,字段 类型)
row format delimited fields terminated by “”;
load data local inpath “” into table tb_name partition(字段=”’’,字段=””);
9.数据导入方式总结
数据导入有以下几种方式:
1)基本方式
将数据文件直接上传到表的目录下
从本地将数据文件上传到表的目录下
Load data local inpath “” into table tb_name;
从hdfs中将文件移动到表的目录下
Load data inpath “”into table tb_name;
建表时直接指定表提取数据的目录
2)Insert语法(增量)
导入一条数据
Insert into tb_name values(v1,v2…);
导入多条数据
Insert into tb_name values(v1,v2…),values(v1,v2…)…;
导入另一个表格数据
Insert into tb_name select * from tb_name;
覆盖导入数据
Insert overwrite tb_name select * from tb_name;
3)create语法(全量)
字段 类型,
字段 类型,
…
)as
Create table tb_name()
as
Select * from tb_name;
4)import导入
首先export导出
Export table tb_name to “”;
再import导入
Import table tb_name from “”;
注:导入的数据只能是上一步导出的数据
10.导出方式总结
1)导出到本地
不带分隔符:
Insert overwrite local directory “”
Select * from tb_name;
带分隔符:
Insert overwrite local directory “”
Row format delimited fileds terminated by “\t”
Select * from tb_name;
2)导出到hdfs
不带分隔符:
Insert overwrite directory “”
Select * from tb_name;
带分隔符:
Insert overwrite directory “”
Row format delimited fileds terminated by “\t”
Select * from tb_name;
3)hdfs命令
Hdfs dfs -get “src” “local”;
4)hive命令
执行sql语句
Hive -e “sql”
执行sql文件
Hive -f “filename”
5)Export
Export table tb_name to “”;
6)Sqoop
用于将hdfs中的结构化数据导入到mysql表格中,也可以将mysql表格中的数据导入到hdfs中