天天看點

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資料庫的檔案夾裡有兩個檔案夾:

Hive的分區表

3.查詢指定分區的資料:

單分區查詢:

多分區聯合查詢:

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

           

查詢結果:(此結果為三個分區的并集)

Hive的分區表

4.增加分區

增加單個分區:

同時增加多個分區:

5.删除分區

删除單個分區:

同時删除多個分區:

6.檢視分區表的多分區情況

Hive的分區表

7.檢視分區表結構

Hive的分區表

分區表注意事項

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;
           
查詢資料(查詢不到剛上傳的資料)
           

執行修複指令

再次查詢資料

(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');
           
查詢資料
           
(3)方式三:建立檔案夾後load資料到分區
	建立目錄
           

上傳資料

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

查詢資料

繼續閱讀