hive-分區表

1 分區表

[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]mysql

1.1 分區表

在建表時,指定了PARTITIONED BY ,這個表稱爲分區表
PARTITIONED BY 以什麼分區sql

1.2 分區概念

MR: 在MapTask輸出key-value時,爲每一個key-value計算一個區號,同一個分區的數據,會被同一個reduceTask處理
這個分區的數據,最終生成一個結果文件!
經過分區,將MapTask輸出的key-value通過reduce後,分散到多個不一樣的結果文件中!
Hive: 將表中的數據,分散到表目錄下的多個子目錄(分區目錄)中oop

1.3 分區意義

  • 分區的目的是爲了就數據,分散到多個子目錄中,在執行查詢時,能夠只選擇查詢某些子目錄中的數據,加快查詢效率!
  • 只有分區表纔有子目錄(分區目錄)
  • 分區目錄的名稱由兩部分肯定: 分區列列名=分區列列值
  • 將輸入導入到指定的分區以後,數據會附加上分區列的信息!
  • 分區的最終目的是在查詢時,使用分區列進行過濾!

2 分區表操做

2.1 建立分區表

多級分區表,有多個分區字段
create external table if not exists learnwork.deptpart2(
deptno int,
dname string,
loc int
)
PARTITIONED BY(area string,province string)
row format delimited fields terminated by '\t';orm


create external table if not exists learnwork.deptpart3(
deptno int,
dname string,
loc int
)
PARTITIONED BY(area string)
row format delimited fields terminated by '\t'
location 'hdfs://hadoop101:9000/deptpart3';hadoop

2.2 分區的查詢

show partitions 表名string

2.3 建立分區

  1. alter table 表名 add partition(分區字段名=分區字段值) ;it

    • 在hdfs上生成分區路徑
    • 在mysql中metastore.partitions表中生成分區的元數據
  2. 直接使用load命令向分區加載數據,若是分區不存在,load時自動幫咱們生成分區
  3. 若是數據已經按照規範的格式,上傳到了HDFS,能夠使用修復分區命令自動生成分區的元數據
    msck repair table 表名;

注意事項:

  1. 若是表是個分區表,在導入數據時,必須指定向哪一個分區目錄導入數據
  2. 若是表是多級分區表,在導入數據時,數據必須位於最後一級分區的目錄
相關文章
相關標籤/搜索