1

以下两个用于在配置单元中创建静态分区的语句之间是否存在任何内部/性能差异,我已经尝试了两种方法,并且在将数据加载到分区后它们都可以正常工作

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

1 回答 1

2

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

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

于 2016-09-19T18:47:24.693 回答