分區表
創建分區表
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';