以下两个用于在hive中创建静态分区的语句之间是否存在任何内部/性能差异,我已尝试过两种方式,并且在将数据加载到分区后两者都正常工作
dfs -mkdir /user/cloudera/sqoop_import/avroData/orders_part/order_month=2014-02;
alter table orders_part add partition(order_month='2014-02');
答案 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'
。