Hive中的分区表

来源:互联网 发布:淘宝运营提成多少个点 编辑:程序博客网 时间:2024/05/29 13:11

分区表

创建分区表

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';