[warning] 分区表:
- 分区表是为了方便快速查询数据而设计的,它可以将数据按照省份、时间等对数据进行分类管理,比如一个省份是一个目录层级,省下的每个市是一个子目录层级,与该市相关的数据都存储在该目录下。也可以将该省或者市的数据继续按照年、月来进行细分管理。
- 分区表可以结合内部表和外部表使用,因此分区表的操作也分为两种。
[success] 实验环境:完全分布式--bigdata1
[info] (1)创建按省份区分的测试数据
# 广东省数据
cd /data/software
vi order_guangdong.txt
# 添加以下内容
1 TK-20200606098063 忠信友联安防 -35.00 现结 广东省 2020-06-06 09:40:36
2 TK-20200605191989 诚达电脑 -241.00 月结 广东省 2020-06-05 19:00:57
3 TK-20200605158473 智凡科技 -180.00 现结 广东省 2020-06-05 15:41:22
4 TK-20200605101022 李生 -257.00 现结 广东省 2020-06-05 10:32:26
5 TK-20200604185303 朱武达 -1140.00 现结 广东省 2020-06-04 18:38:17
# 湖南省数据
cd /data/software
vi order_hunan.txt
# 添加以下内容
6 TK-20200604172688 创智电脑 -627.00 月结 湖南省 2020-06-04 17:50:35
7 TK-20200604152246 先安安防 -572.00 现结 湖南省 2020-06-04 15:22:56
8 TK-20200604141635 和平朗盛 -2480.00 月结 湖南省 2020-06-04 14:59:11
9 TK-20200604102417 长青藤 -365.00 月结 湖南省 2020-06-04 10:20:01
10 TK-20200604092869 河源客户 -310 现结 湖南省 2020-06-04 09:28:38
# 四川省数据
cd /data/software
vi order_sichuan.txt
# 添加以下内容
11 TK-20200603182813 灯塔易展电脑 0.00 现结 四川省 2020-06-03 18:51:40
12 TK-20200603162972 民族中学 -3625 月结 四川省 2020-06-03 16:39:17
13 TK-20200603148551 兴旺 -716.00 现结 四川省 2020-06-03 14:07:09
14 TK-20200603104403 同行曾林涛 -195.00 月结 四川省 2020-06-03 10:36:23
15 TK-20200603105333 同行曾林涛 -130 月结 四川省 2020-06-03 10:35:30
[info] (2)创建内部分区表
create table order_table (
num string,
code string,
name string,
fee string,
type string,
city string,
time string
)
PARTITIONED BY (cityName string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
创建分区表需要指定 PARTITIONED BY ,通俗地说就是分区字段,需要注意的是分区字段名称不能是表的字段名称。
例如上面的建表语句中,是想对省份进行分区,但是数据本身包含了这个字段:city,因此重新取了一个分区字段
名称:cityName来代表省份。
:-:
[info] (3)分区表加载数据
# 加载广东省数据
load data local inpath '/data/software/order_guangdong.txt' into table order_table partition(cityName="guangdong");
# 加载湖南省数据
load data local inpath '/data/software/order_hunan.txt' into table order_table partition(cityName="hunan");
# 加载四川省数据
load data local inpath '/data/software/order_sichuan.txt' into table order_table partition(cityName="sichuan");
:-:
[info] (4)HDFS验证分区层级关系
[info] (5)查询分区表数据
# 虽然分区字段在HDFS上是一个层级目录,但是其实它还是表的字段,我们可以使用分区字段直接作为查询条件
select * from order_table where cityName="guangdong";
:-:
内容来源于网络,如有侵权,请联系作者删除!