Hive - 静态分区 - 直接创建分区目录与使用alter table语句

时间:2016-09-18 17:47:24

标签: hadoop hive hdfs

以下两个用于在hive中创建静态分区的语句之间是否存在任何内部/性能差异,我已尝试过两种方式,并且在将数据加载到分区后两者都正常工作

dfs -mkdir /user/cloudera/sqoop_import/avroData/orders_part/order_month=2014-02;
alter table orders_part add partition(order_month='2014-02');

1 个答案:

答案 0 :(得分:2)

此命令:dfs -mkdir /user/cloudera/sqoop_import/avroData/orders_part/order_month=2014-02;不创建分区,它会创建一个目录。此目录尚未作为表分区挂载。分区是一个目录和一个元数据,其中包含有关存储在Metastore中的分区(键值+分区目录)的信息。执行mkdir后,可以使用show partitions orders_part;命令轻松检查。该目录不在分区列表中。

alter table orders_part add partition(order_month='2014-02');创建目录order_month=2014-02并将其安装为分区。

可以使用

动态创建分区
insert overwrite table orders_part partition(order_month) 
select ... 

命令。在这种情况下,目录将自动创建并作为分区挂载。

考虑一下:您可以使分区不一定位于目录中,等于'key = value'。例如:alter table orders_part add partition(order_month='2014-02') location '/user/cloudera/sqoop_import/avroData/orders_part/mydir' ;注意分区目录现在是'/user/cloudera/sqoop_import/avroData/orders_part/mydir'