大資料學習系列——HIVE學習分割槽
分割槽查詢
- Hive查詢執行分割槽語法
SELECT day_table.* FROM day_table WHERE day_table.dt>= '2008-08-08';
分割槽表的意義在於優化查詢。查詢時儘量利用分割槽欄位。如果不使用分割槽欄位,就會全部掃描。
- Hive查詢表的分割槽資訊語法:
SHOW PARTITIONS day_hour_table;
大資料學習群119599574 靜態分割槽
- Hive 在建立表時新增partition欄位
a、單分割槽建表語句:
create table day_table (id int, content string) partitioned by (dt string);
單分割槽表,按天分割槽,在表結構中存在id,content,dt三列。
以dt為資料夾區分
b、 雙分割槽建表語句:
create table day_hour_table (id int, content string) partitioned by (dt string, hour string);
雙分割槽表,按天和小時分割槽,在表結構中新增加了dt和hour兩列。
先以dt為資料夾,再以hour子資料夾區分
- Hive在表建立後新增分割槽表語法
ALTER TABLE table_name ADD [IF NOT EXISTS] PARTITION partition_spec [LOCATION 'location1'] partition_spec [LOCATION 'location2'] ...;
partition_spec:
: (partition_column = partition_col_value, partition_column = partition_col_value, ...)
例:
ALTER TABLE day_table ADD PARTITION (dt='2008-08-08', hour='08')
- Hive刪除分割槽語法:
- 使用者可以用 ALTER TABLE DROP PARTITION 來刪除分割槽。
內部表中、對應分割槽的元資料和資料將被一併刪除。
例:
ALTER TABLE day_hour_table DROP PARTITION (dt='2008-08-08', hour='09');
- Hive向指定分割槽新增資料語法
- LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]
- 例:
LOAD DATA INPATH '/user/pv.txt' INTO TABLE day_hour_table PARTITION(dt='2008-08- 08', hour='08');
LOAD DATA local INPATH '/user/hua/*' INTO TABLE day_hour partition(dt='2010-07- 07');
當資料被載入至表中時,不會對資料進行任何轉換。Load操作只是將資料複製至Hive表對應的位置。資料載入時在表下自動建立一個目錄
動態分割槽
- 開啟支援動態分割槽
- set hive.exec.dynamic.partition=true;
預設:false
- set hive.exec.dynamic.partition.mode=nostrict;
預設:strict(至少有一個分割槽列是靜態分割槽)
相關引數
- set hive.exec.max.dynamic.partitions.pernode;
每一個執行mr節點上,允許建立的動態分割槽的最大數量(100)
- set hive.exec.max.dynamic.partitions;
所有執行mr節點上,允許建立的所有動態分割槽的最大數量(1000)
- set hive.exec.max.created.files;
所有的mr job允許建立的檔案的最大數量(100000)