静态分区与动态分区的分区字段都是一个表外的虚拟字段,静态分区需要是手动指定分区字段及文件位置(load data );动态分区则是根据指定的字段值自动判断分区,导入数据需要借助一张原始数据表(insert into).
- 静态分区案例
-
--构建一个用户表 create table user( id int, name string, sex string, age int ) partition by (gender string) row format delimited fields terminated by '\t'; --静态导入 HDFS上 "/data/user_boy.txt","/data/user_girl.txt" 文件 load data inpath '/data/user_boy.txt' into table user partition(gender = '男') load data inpath '/data/user_girl.txt' into table user partition(gender = '女')
- 动态分区案例
-
--构建一个原始用户表 create table user_0( id int, name string, sex string, age int ) row format delimited fields terminated by '\t'; --插入数据 insert into user_0 value (1,'张三','男',10), (2,';李四','男',11), (3,'王五','女',12), (4,'赵六','女',10); -- 设置属性 set hive.exec.dynamic.partition.mode=nonstrict; <----非严格模式下可以都是动态分区,而严格模式下必须至少有一个静态分区 set hive.exec.dynamic.partition=true; 开启动态分区 --构建一个用户表 create table user( id int, name string, sex string, age int ) partition by (gender string) row format delimited fields terminated by '\t'; --动态导入数据 insert into user partition(gender) select *,sex as gender from user_0;