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'
union
select * from dept_partition where month='201708'
union
select * from dept_partition where month='201707';
查詢結果:(此結果為三個分區的并集)
4.增加分區
增加單個分區:
同時增加多個分區:
5.删除分區
删除單個分區:
同時删除多個分區:
6.檢視分區表的多分區情況
7.檢視分區表結構
分區表注意事項
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');
查詢資料