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

Hive - static partitioning - difference between creating the partition directory directly vs using alter table statement

下面两个在 hive 中创建静态分区的语句之间是否有任何 internal/performance 区别,我已经尝试了两种方法,并且在将数据加载到分区后它们都没有任何问题

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

这个命令:dfs -mkdir /user/cloudera/sqoop_import/avroData/orders_part/order_month=2014-02;不创建分区,它创建一个目录。此目录尚未挂载为 table 分区。分区是一个目录加上一个元数据,元数据包含存储在 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'