Hive中的分區表

分區表

創建分區表

CREATE TABLE employees ( 
    name STRING, 
    salary FLOAT,
    subordinates ARRAY<STRING>,
    deductions MAP<STRING, FLOAT>,
    address STRUCT<street:STRING, city:STRING, state:STRING, zip:INT>
)
PARTITIONED BY (country STRING, state STRING);

分區表的目錄結構

沒有分區的目錄結構:
hdfs://bigdata02:/user/hive/warehouse/db01.db/employees
分區後的目錄結構:
hdfs://bigdata02:/user/hive/warehouse/db01.db/employees/country=CH/state=JS
hdfs://bigdata02:/user/hive/warehouse/db01.db/employees/country=AM/state=NY

分區表的優勢

當我們需要查詢中國江蘇的僱員的信息的時候,我們就只需要列出一個目錄下的數據就可以了,而不是掃描整個數據進行mapreduce處理,查詢數據自然會快很多

分區表的劣勢

我們知道對於分區表的每一個分區,都會啓動一個map去讀取數據,如果分區過於小的話,當我們對整個數據進行操作的時候,就會啓動一個巨大的MapReduce任務,而每一個任務可能只是完成很少的一部分數據量的計算,所以我們對分區的劃分需要有個度

分區表的信息的查詢

hive> SHOW PARTITIONS employees; 
...
Country=CA/state=AB 
country=CA/state=BC
...

SHOW PARTITIONS employees PARTITI〇N(country=,US,);

SHOW PARTITIONS employees PARTITION(country='US', state='AK');

向分區表添加數據

LOAD DATA LOCAL INPATH '/home/hadoop/js.employee'
INTO TABLE employees PARTITION (country = 'CH', state = 'JS');

外部表和分區表的結合

優勢:外部表可以隨意指定分區的位置,我們就可以直接爲分區表添加分區就可以了

alter table employee add partition (country='CH',state='JS') location 'hdfs://bigdata02:9000/employee/js';
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章