Hive | HDFS |
---|---|
表 | 目录 |
分区 | 目录 |
数据 | 文件 |
桶 | 文件 |
一、内部表
介绍
最简单的一种表,相当于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中的存储文件
本站资源均来自互联网,仅供研究学习,禁止违法使用和商用,产生法律纠纷本站概不负责!如果侵犯了您的权益请与我们联系!
转载请注明出处: 免费源码网-免费的源码资源网站 » Hive的数据模型
发表评论 取消回复