hive的动态分区表的创建及数据的导入

动态分区流程:
①建一个动态分区表
②建一个临时表(分区字段作为临时表的表内字段)
③将数据导入临时表中
④根据临时表中的数据含有的动态分区字段的值进行数据加载并
动态分区

-- 设置属性
set hive.exec.dynamic.partition.mode=nonstrict;   <----非严格模式下可以都是动态分区,而严格模式下必须至少有一个静态分区
set hive.exec.dynamic.partition=true; 开启动态分区

-- 创建动态分区表student
drop table if exists student;
create table if not exists student
(
    id int,
    name string
)
partitioned by (age int)
row format delimited fields terminated by ','
;
-- 创建临时表
drop table if exists temp;
create table if not exists temp
(
    id   int,
    name string,
    age int
)
row format delimited fields terminated by ','
;
-- 准备一个文件,含有临时表中的所有字段数据,data.txt,该文件在linux文件系统中
1,zhangsan,15
2,lisi,16
3,wangwu,20
4,hanmeimei,50
5,liufang,20
6,wuting,15
7,dafang,30
8,shiba,10
9,chifan,12
10,kuishi,12

-- 将数据导入到临时表中
load data local inpath '/root/data.txt' into table temp;

-- 查看数据是否成功导入临时表中
select * from temp;

hive的动态分区表的创建及数据的导入_第1张图片

-- 如果相在idea上运行的快一些,就设置为本地模式
set hive.exec.mode.local.auto=true;

-- 将临时表中的数据导入到动态分区表中,并根据分区字段的值自动进行数据的分区
insert into table student partition(age) select id,name,age from temp;

-- 查看动态分区表中是否成功导入数据并分区
select * from student;

---->可以看到查询结果已经按照年龄进行分区了
hive的动态分区表的创建及数据的导入_第2张图片
分区其实就是将表中数据分目录进行存储,可以提高查询效率。
在hdfs文件系统中可以看到student表下有很多age=值的目录。
hive的动态分区表的创建及数据的导入_第3张图片

你可能感兴趣的:(hadoop,大数据,linux,hive,分区表,大数据,java,mysql)