HiveHDFS
目录
分区目录
数据文件
文件

一、内部表

介绍

最简单的一种表,相当于Mysql、Oracle中的表
只是将数据保存到Hive自己的数据仓库中hive/warehouse/
每个表在hive中都有一个对应的目录存储数据,当删除此表时,元数据和数据都将会被删除

1.创建

和Mysql等数据库一样的创建流程,最后一行表示设置分割符为,以便于载入csv文件

create table emp(
id int,
name string,
job string,
department int
)
row format delimited fields terminated by ',';

2.插入

insert语句

INSERT INTO emp (id, name, job, department) 
VALUES (1, 'John Doe', 'Engineer', 101);

3.载入

load语句,可以导入csv文件
文件处于本地磁盘中(不在hdfs中)

load data local inpath '/root/tools/01.csv' into table emp;

在这里插入图片描述

上传后的文件将会保存在如下的hdfs路径中
在这里插入图片描述

文件处于Hdfs中

load data inpath '/input/01.csv' into table emp;

导入之后相当于执行剪切操作,即将此文件移动到hive/warehouse/emp的目录下

二、分区表

概念
在这里插入图片描述

create table emp_part(
id int,
name string,
job string
)
partitioned by (department int)
row format delimited fields terminated by ',';

插入语句

INSERT INTO TABLE emp_part PARTITION (department = 101)  
VALUES (1, 'John Doe', 'Engineer');  

以下为查询效果
在这里插入图片描述
HDFS中的存储
在这里插入图片描述

三、外部表

和内部表类似,在元数据的组织上相同,区别仅在于数据保存在HDFS中,Hive不会将其转移到数据仓库的目录内(/user/hive/warehouse),而是与这个数据建立一个链接,并且允许创建分区,当删除一个外部表时,仅删除链接

CREATE EXTERNAL TABLE emp_part_external(  
    id int,  
    name string,  
    job string  
)  
PARTITIONED BY (department int)  
ROW FORMAT DELIMITED  
FIELDS TERMINATED BY ','  
LOCATION '/input/emp_part_external';

数据存储于hdfs的/input/emp_part_external目录下,并且此表已经设置了分区

四、桶表

对数据进行哈希取值,存储在不同的文件中,类似于hash分区
在这里插入图片描述
以下为创建代码,将根据部门进行“分桶”

CREATE TABLE emp_bucketed(  
    id int,  
    name string,  
    job string,  
    department int  
)  
CLUSTERED BY (department) INTO 10 BUCKETS  
ROW FORMAT DELIMITED  
FIELDS TERMINATED BY ',';

hdfs中的存储文件
在这里插入图片描述

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部