1. 程式人生 > >大資料學習系列——HIVE學習分割槽

大資料學習系列——HIVE學習分割槽

分割槽查詢

  1. Hive查詢執行分割槽語法

SELECT day_table.* FROM day_table WHERE day_table.dt>= '2008-08-08';

分割槽表的意義在於優化查詢。查詢時儘量利用分割槽欄位。如果不使用分割槽欄位,就會全部掃描。

  1. Hive查詢表的分割槽資訊語法:

SHOW PARTITIONS day_hour_table;

大資料學習群119599574 靜態分割槽

  1. 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子資料夾區分

  1. 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')

  1. Hive刪除分割槽語法:
  2. 使用者可以用 ALTER TABLE DROP PARTITION 來刪除分割槽。

內部表中、對應分割槽的元資料和資料將被一併刪除。

例:

ALTER TABLE day_hour_table DROP PARTITION (dt='2008-08-08', hour='09');

  1. Hive向指定分割槽新增資料語法
  2. LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]
  3. 例:

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表對應的位置。資料載入時在表下自動建立一個目錄

動態分割槽

  1. 開啟支援動態分割槽
  • 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)

大資料學習系列之——HIVE學習分割槽