注意:必須在表定義時指定對應的partition字段。優化
一.指定分區
1.單分區spa
建表語句:create table day_table(id int, content string) partitioned by (dt string);string
單分區表,按天分區,在表結構中存在id,content,dt三列。it
以dt爲文件夾區分。io
2.雙分區table
建表語句:create table day_hour_table(id int,content string) partitioned by (dt string, hour string);class
雙分區表,按天和小時分區,在表結構中新增長了dt和hour兩列。file
先以dt爲文件夾,再以hour子文件區分。數據
二.添加分區
添加語句:ALTER TABLE table_name ADD [IF NOT EXISTS] PARTITION partition_spec [LOCATION 'location'] partition_spec [LOCATION 'location2']...查詢
例子:ALTER TABLE day_table ADD PARTITION (dt='2019-03-27',hour='20')
三.刪除分區
刪除語句:ALTER TABLE table_name DROP partition_spec,partition_spec...
注意:內部表中對應分區的元數據和數據都將被一併刪除。
例子:ALTER TABLE day_hour_table DROP PARTITION (dt='2019-03-27',hour='21');
四.指定分區添加數據
添加語句:LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION(partcol=val1,partcol2=val2...)]
例子:
1.LOAD DATA INPATH '/usr/pv.txt' INTO TABLE day_hour_table PARTITION (dt='2019-03-27', hour='21');
2.LOAD DATA local INPATH '/user/zhen/*' INTO TABLE day_hour partition(dt='2019-03-27');
注意:當數據被加載至表中時,不會對數據進行任何轉換。LOAD操做只是將數據複製至Hive表對應的位置上。數據加載是會在表下自動建立一個目錄。
五.查詢
查詢語句:SELECT day_table.* FROM day_table WHERE day_table.dt>='2019-03-27';
注意:分區表的意義在於優化查詢。查詢時儘可能利用分區字段。若是不使用分區字段,就會全表掃描。
六.查看錶分區信息
語句:SHOW PARTITIONS day_hour_table;