1:静态分区
表的分区字段的值需要开发人员手动给定
1:创建分区表
use myhive;
create table order_partition(
order_number string,
order_price double,
order_time string
)
partitioned BY(month string)
row format delimited fields terminated by '\t';
2:准备数据
cd /install/hivedatas
vim order.txt
10001 100 2021-03-02
10002 200 2021-03-02
10003 300 2021-03-02
10004 400 2021-03-03
10005 500 2021-03-03
10006 600 2021-03-03
10007 700 2021-03-04
10008 800 2021-03-04
10009 900 2021-03-04
3:加载数据到分区表
load data local inpath '/install/hivedatas/order.txt' overwrite into table order_partition partition(month='2019-03');
4:查询结果数据
select * from order_partition where month='2021-03';
结果为:
10001 100.0 2021-03-02 2021-03
10002 200.0 2021-03-02 2021-03
10003 300.0 2021-03-02 2021-03
10004 400.0 2021-03-03 2021-03
10005 500.0 2021-03-03 2021-03
10006 600.0 2021-03-03 2021-03
10007 700.0 2021-03-04 2021-03
10008 800.0 2021-03-04 2021-03
10009 900.0 2021-03-04 2021-03
2:动态分区
按照需求实现把数据自动导入到表的相应分区中,不需要手动指定分区字段的值
根据分区字段不同的值,自动将数据导入到分区表不同的分区中
1:创建表
--创建普通表
create table t_order(
order_number string,
order_price double,
order_time string
)row format delimited fields terminated by '\t';
--创建目标分区表
create table order_dynamic_partition(
order_number string,
order_price double
)partitioned BY(order_time string)
row format delimited fields terminated by '\t';
2:准备数据
cd /install/hivedatas
vim order_partition.txt
10001 100 2021-03-02
10002 200 2021-03-02
10003 300 2021-03-02
10004 400 2021-03-03
10005 500 2021-03-03
10006 600 2021-03-03
10007 700 2021-03-04
10008 800 2021-03-04
10009 900 2021-03-04
3:向普通表t_order加载数据
load data local inpath '/install/hivedatas/order_partition.txt' overwrite into table t_order;
4:动态加载数据到分区表中
-- 要想进行动态分区,需要设置参数
-- 开启动态分区功能
hive> set hive.exec.dynamic.partition=true;
-- 设置hive为非严格模式
hive> set hive.exec.dynamic.partition.mode=nonstrict;
hive> insert into table order_dynamic_partition partition(order_time) select order_number, order_price, order_time from t_order;
5:查看分区
hive> show partitions order_dynamic_partition;