Hive的分區表

Hive分區表
Hive分區表對應的是HDFS上獨立的文件夾,該文件夾存放的是該分區的所有數據,其實分區就是分目錄。Hive通過分區把一個大的數據集根據業務需要分割成小的數據集,在查詢時能夠通過where關鍵詞選擇指定分區,從而提高查找效率。爲什麼這樣能夠提高查找效率呢?其實是因爲Hive存放的數據是沒有索引的,如果沒有建立分區直接查詢,Hive就會暴力查詢,效率很低,所以通過分區能很好提高Hive的查詢效率。分區還能夠更加方便的管理一些特殊數據,例如一些日誌數據,可以是一個天一個分區或者一個月一個分區,視數據量而定,這樣就能很好地管理日誌數據了。

分區表的基本操作
現在有以下數據:
10 ACCOUNTING 1700
20 RESEARCH 1800
30 SALES 1900
40 OPERATIONS 1700

1.創建分區表語句,表中有三列數據,並指定按月份分區,但是數據中心並沒有月份,月份是插入或者加載數據時指定的:

create table dept_partition(
deptno int, dname string, loc string
)
partitioned by (month string)
row format delimited fields terminated by '\t';

2.把數據加載到分區表裏面,並指定這份數據的月份,即指定分區:

load data local inpath '/opt/module/data/dept.txt' into table default.dept_partition partition(month='201709');
'/opt/module/data/dept.txt' into table default.dept_partition partition(month='201708');
'/opt/module/data/dept.txt' into table default.dept_partition partition(month='201707');

然後就能在HDFS上即可看到,在dep_partition數據庫的文件夾裏有兩個文件夾:
在這裏插入圖片描述
3.查詢指定分區的數據:
單分區查詢:

select * from dept_partition where month='201709';

多分區聯合查詢:

select * from dept_partition where month='201709'
              union
              select * from dept_partition where month='201708'
              union
              select * from dept_partition where month='201707';

查詢結果:(此結果爲三個分區的並集)
在這裏插入圖片描述
4.增加分區
增加單個分區:

alter table dept_partition add partition(month='201706');

同時增加多個分區:

alter table dept_partition add partition(month='201705') partition(month='201704');

5.刪除分區
刪除單個分區:

alter table dept_partition drop partition(month='201704';

同時刪除多個分區:

alter table dept_partition drop partition(month='201705'),partition(month='201706');

6.查看分區表的多分區情況

show partitions dept_partition;

在這裏插入圖片描述
7.查看分區表結構

desc formatted dept_partition;

在這裏插入圖片描述

分區表注意事項
1.創建二級分區表

create table dept_partition2(deptno int,dname string,loc string)
partitioned by (month string,day string)
row format delimited fields terminated by '\t';

2.加載數據

load data local inpath '/opt/module/data/dept.txt' into table
 default.dept_partition2 partition(month='201709', day='13');

3.把數據直接上傳到分區目錄上,讓分區表和數據產生關聯的三種方式
(1)方式一:上傳數據後修復
上傳數據

dfs -mkdir -p /user/hive/warehouse/dept_partition2/month=201709/day=12;
dfs -put /opt/module/datas/dept.txt /user/hive/warehouse/dept_partition2/month=201709/day=12;
查詢數據(查詢不到剛上傳的數據)
select * from dept_partition2 where month='201709' and day='12';

執行修復命令

 msck repair table dept_partition2;

再次查詢數據

select * from dept_partition2 where month='201709' and day='12';
(2)方式二:上傳數據後添加分區
上傳數據
dfs -mkdir -p /user/hive/warehouse/dept_partition2/month=201709/day=11;
dfs -put /opt/module/datas/dept.txt /user/hive/warehouse/dept_partition2/month=201709/day=11;
執行添加分區
alter table dept_partition2 add partition(month='201709',
 day='11');
查詢數據
select * from dept_partition2 where month='201709' and day='11';
(3)方式三:創建文件夾後load數據到分區
	創建目錄
dfs -mkdir -p /user/hive/warehouse/dept_partition2/month=201709/day=10;

上傳數據

load data local inpath '/opt/module/datas/dept.txt' into table
 dept_partition2 partition(month='201709',day='10');

查詢數據

select * from dept_partition2 where month='201709' and day='10';
發佈了17 篇原創文章 · 獲贊 11 · 訪問量 5112
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章